Reputation: 170
I have two gridview
textbox
columns. I'm using auto-complete in the gridview
's textbox
column individually, but both gridview
textbox
columns'
auto-complete are mixing data across these columns.
How can I display auto-complete without mixing data from 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;
}
}
Second Gridview Columns
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;
}
}
Upvotes: 4
Views: 4320
Reputation: 170
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 Find the Solution i forgot to write else conditioned
Upvotes: 1
Reputation: 63327
I've tested and this should work as 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 of what type your namesCollection
is, if you want to assign to AutoCompleteSource
property, you have to be sure it's type of AutoCompleteStringCollection
.
Upvotes: 0