Autocomplete in gridview text box

I have two gridview textbox columns. I use autocomplete in the gridview textbox column separately, but both gridview textbox auto-complete columns mix data for these columns.

How can I display autocomplete without mixing data with article_code and yarn_count ?

Here is my code:

  AutoCompleteStringCollection namesCollection4=new AutoCompleteStringCollection(); string query = "select article_code from article_production"; con.Open(); SqlCommand cmb = new SqlCommand(query, con); SqlDataReader dr = cmb.ExecuteReader(); if (dr.HasRows == true) { while (dr.Read()) { namesCollection4.Add(dr["article_code"].ToString()); } } else { MessageBox.Show("Data not found"); } con.Close(); dr.Close(); int column = dataGridView1.CurrentCell.ColumnIndex; if(column==8) { TextBox tb = e.Control as TextBox; if (tb != null) { tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend; tb.AutoCompleteCustomSource = namesCollection4; tb.AutoCompleteSource = AutoCompleteSource.CustomSource; } } 

Gridview second column

  AutoCompleteStringCollection namesCollection1=new AutoCompleteStringCollection(); string query1 = "select yarn_count from yarn"; con.Open(); SqlCommand cmb1 = new SqlCommand(query1, con); SqlDataReader dr1 = cmb1.ExecuteReader(); if (dr1.HasRows == true) { while (dr1.Read()) { namesCollection1.Add(dr1["yarn_count"].ToString()); } } else { MessageBox.Show("Data not found"); } con.Close(); dr1.Close(); int column1 = dataGridView1.CurrentCell.ColumnIndex; if (column1 == 9) { TextBox tb1 = e.Control as TextBox; if (tb1 != null) { tb1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; tb1.AutoCompleteCustomSource = namesCollection1; tb1.AutoCompleteSource = AutoCompleteSource.CustomSource; } } 
+4
source share
2 answers
  AutoCompleteStringCollection namesCollection1=new AutoCompleteStringCollection(); string query1 = "select yarn_count from yarn"; con.Open(); SqlCommand cmb1 = new SqlCommand(query1, con); SqlDataReader dr1 = cmb1.ExecuteReader(); if (dr1.HasRows == true) { while (dr1.Read()) { namesCollection1.Add(dr1["yarn_count"].ToString()); } } else { MessageBox.Show("Data not found"); } con.Close(); dr1.Close(); int column1 = dataGridView1.CurrentCell.ColumnIndex; if (column1 == 9) { TextBox tb1 = e.Control as TextBox; if (tb1 != null) { tb1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; tb1.AutoCompleteCustomSource = namesCollection1; tb1.AutoCompleteSource = AutoCompleteSource.CustomSource; } } else { namesCollection1.Clear(); } finally{con.Close();} 

I found a solution I forgot to write more conditionally

+1
source

I tested and this should work the way you want:

 //EditingControlShowing event handler for your DataGridView private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridViewTextBoxEditingControl cellEdit = e.Control as DataGridViewTextBoxEditingControl; cellEdit.AutoCompleteCustomSource = new AutoCompleteStringCollection(); cellEdit.AutoCompleteMode = AutoCompleteMode.SuggestAppend; cellEdit.AutoCompleteSource = AutoCompleteSource.CustomSource; int colIndex = dataGridView.CurrentCell.ColumnIndex; if (colIndex == 8) cellEdit.AutoCompleteCustomSource.AddRange(new string[] { "Aaaa", "Bbbb", "Cccc" }); else if (colIndex == 9) cellEdit.AutoCompleteCustomSource.AddRange(new string[] { "1234", "5678" }); } 

I'm not sure what type of your namesCollection , if you want to assign an AutoCompleteSource property, you must be sure that it is an AutoCompleteStringCollection type.

0
source

Source: https://habr.com/ru/post/1486619/


All Articles