2011-04-06 7 views
5

Je charge une énorme base de données d'Excel (environ 2000 éléments) en liste déroulante. Par exemple les titres de CD. Ensuite, je sélectionne 1 titre de CD à partir de ce 2000. Je voudrais utiliser ici autocomplete, mais je ne sais pas comment ..AutoComplete ComboBox C#

 // Loading items from Excel 
     for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++) 
      { 
       for (cCnt = 1; cCnt < 2; cCnt++) 
       { 
        str = Convert.ToString(saRet[rCnt,cCnt]); 
        // Loading items to ComboBox 
        ReferenceCombo.Items.Add(str); 
      } 

Répondre

24

Sur votre formulaire, vous devez définir deux propriétés pour votre ComboBox:

AutoCompleteMode doit être Suggest, Append ou SuggestAppend. Je recommande SuggestAppend.

AutoCompleteSource doit être ListItems.

3

En plus de définir la propriété référencée par John il y a environ 10 minutes, est un code ici que j'utilise pour DataBind ma zone de liste déroulante:

static BindingSource jp2bindingSource = new BindingSource(); 

void jp2FillCombo() { 
    ComboBox comboBox1 = new ComboBox(); 
    comboBox1.Items.Clear(); 
    object[] objs = jp2Databind(new DataSet(), "Table1", "Column1", true); 
    comboBox1.Items.AddRange(objs); 
} 

static object[] jp2Databind(DataSet dataset, string tableName, string columnName, bool unique) { 
    jp2bindingSource.DataSource = dataset; 
    jp2bindingSource.DataMember = tableName; 
    List<string> itemTypes = new List<string>(); 
    foreach (DataRow r in dataset.Tables[tableName].Rows) { 
    try { 
     object typ = r[columnName]; 
     if ((typ != null) && (typ != DBNull.Value)) { 
     string strTyp = typ.ToString().Trim(); 
     if (!String.IsNullOrEmpty(strTyp)) { 
      if (unique) { 
      if (!itemTypes.Contains(strTyp)) { 
       itemTypes.Add(strTyp); 
      } 
      } else { 
      itemTypes.Add(strTyp); 
      } 
     } 
     } 
    } catch (Exception err) { 
     Global.LogError("Databind", err); 
    } 
    } 
    try { 
    itemTypes.Sort(); 
    } catch (Exception err) { 
    Console.WriteLine(err.Message); 
    } 
    return itemTypes.ToArray(); 
} 
3

cette méthode fait pour vous

private void LoadStuffNames() 
    { 

     try 
     { 
       string Query = "select stuff_name from dbo.stuff"; 
       string[] names = GetColumnData_FromDB(Query); 

       comboName.AutoCompleteMode = AutoCompleteMode.Suggest; 
       comboName.AutoCompleteSource = AutoCompleteSource.CustomSource; 
       AutoCompleteStringCollection x = new AutoCompleteStringCollection(); 
       if (names != null && names.Length > 0) 
        foreach (string s in names) 
         x.Add(s); 

       comboName.AutoCompleteCustomSource = x; 
     } 
     catch (Exception ex) 
     { 
     } 
     finally 
     { 
     } 

    } 

et implémentez "GetColumnData_FromDB" comme vous le souhaitez

Questions connexes