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
没有评论:
发表评论