user2491383
user2491383

Reputation: 170

autocomplete in gridview textbox

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

Answers (2)

user2491383
user2491383

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

King King
King King

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

Related Questions