2021年4月11日星期日

Dynamic added DataGridView not submitting the required result

Here i'm trying to create a dynamic datagrid. Which will work as a auto complete for the text entered in the textbox. When i type something in the textbox it will search the DB and show the matched values in the Dynamic DataGrid and when i press enter it will show the selected records in the textboxes available.

But the problem i'm facing is when i press enter i'm receiveing an error message as "Index was out of range. Must be non-negative and less than the size of the collection."

Here below i'm pasting the code i have written

Someone please check and let me know the possible error.

private void Form1_Load(object sender, EventArgs e)          {              Search();            }              private DataGridView dgview;          private DataGridViewTextBoxColumn dgviewcol1;          private DataGridViewTextBoxColumn dgviewcol2;            void Search()          {              dgview = new DataGridView();              dgviewcol1 = new DataGridViewTextBoxColumn();              dgviewcol2 = new DataGridViewTextBoxColumn();              this.dgview.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;              this.dgview.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.dgviewcol1, this.dgviewcol2 });              this.dgview.Name = "dgview";              dgview.Visible = false;              this.dgviewcol1.Visible = false;              this.dgviewcol2.Visible = false;              this.dgview.AllowUserToAddRows = false;              this.dgview.RowHeadersVisible = false;              //this.dgview.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;              dgview.SelectionMode = DataGridViewSelectionMode.FullRowSelect;              this.Controls.Add(dgview);              this.dgview.ReadOnly = true;              dgview.BringToFront();          }            void Search(int LX, int LY, int DW, int DH, string ColName, String ColSize)          {              this.dgview.Location = new System.Drawing.Point(LX, LY);              this.dgview.Size = new System.Drawing.Size(DW, DH);                string[] ClSize = ColSize.Split(',');              //Size              for (int i = 0; i < ClSize.Length; i++)              {                  if (int.Parse(ClSize[i]) != 0)                  {                      dgview.Columns[i].Width = int.Parse(ClSize[i]);                  }                  else                  {                      dgview.Columns[i].AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;                  }              }              //Name               string[] ClName = ColName.Split(',');                for (int i = 0; i < ClName.Length; i++)              {                  this.dgview.Columns[i].HeaderText = ClName[i];                  this.dgview.Columns[i].Visible = true;              }          }            bool change = true;    private void textBox1_TextChanged(object sender, EventArgs e)          {              if (textBox1.Text.Length > 0)              {                  this.dgview.Visible = true;                  dgview.BringToFront();                  Search(150, 105, 430, 200, "Product Code,Product Name", "100,0");                  //this.dgview.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.proCode_MouseDoubleClick);                  SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Gershone\source\repos\WindowsFormsApp2\db.mdf;Integrated Security=True;Connect Timeout=30");                  SqlDataAdapter sda = new SqlDataAdapter("Select Top(10) ProductName,ProductID From productdetails WHERE ProductName Like '" + textBox1.Text + "%'", con);                  DataTable dt = new DataTable();                  sda.Fill(dt);                  dgview.Rows.Clear();                                    foreach (DataRow row in dt.Rows)                  {                      int n = dgview.Rows.Add();                      dgview.Rows[n].Cells[0].Value = row["ProductID"].ToString();                      dgview.Rows[n].Cells[1].Value = row["ProductName"].ToString();                  }              }              else              {                  dgview.Visible = false;              }          }            private void textBox1_KeyDown(object sender, KeyEventArgs e)          {              if (e.KeyCode == Keys.Enter)              {                  if (dgview.Rows.Count > 0)                  {                      textBox1.Text = dgview.SelectedRows[0].Cells[0].Value.ToString();                      textBox2.Text = dgview.SelectedRows[0].Cells[1].Value.ToString();                      this.dgview.Visible = false;                      textBox3.Focus();                  }                  else                  {                      this.dgview.Visible = false;                    }              }          }  
https://stackoverflow.com/questions/67037625/dynamic-added-datagridview-not-submitting-the-required-result April 11, 2021 at 02:01AM

没有评论:

发表评论