#c# #winforms #excel #autocomplete
#c# #winforms #excel #автозаполнение
Вопрос:
я загружаю огромную базу данных из Excel (около 2000 элементов) в выпадающий список. Например, названия компакт-дисков. Затем я выбираю 1 название компакт-диска из этого 2000. Я хотел бы использовать здесь автозаполнение, но я не знаю как..
// 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);
}
Ответ №1:
В вашей форме вам необходимо задать два свойства для вашего выпадающего списка:
Режимом автозаполнения должно быть Suggest, Append или SuggestAppend. Я рекомендую SuggestAppend.
Источником автозаполнения должны быть ListItems.
Ответ №2:
этот метод сделает это за вас
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 amp;amp; names.Length > 0)
foreach (string s in names)
x.Add(s);
comboName.AutoCompleteCustomSource = x;
}
catch (Exception ex)
{
}
finally
{
}
}
и реализуйте «GetColumnData_FromDB» по своему усмотрению
Ответ №3:
В дополнение к настройке свойства, на которое ссылался Джон около 10 минут назад, вот некоторый код, который я использую для привязки моего выпадающего списка к данным:
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) amp;amp; (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();
}