我有一个名为cbProduit
的组合框;通过Web服务填充组合框:
ComboBoxItemProduit produiItem = new ComboBoxItemProduit();
produiItem.Text = articleArray.GetAllArticlesResult[i].S_MODELE;
produiItem.Value = articleArray.GetAllArticlesResult[i].S_ID;
cbProduit.Items.Add(produiItem);
问题在于,组合框填充后包含超过30000个项目,我需要按文本进行搜索。
注意:我与数据库没有任何关系,所有信息都来自Web服务。
请问有人可以帮忙吗?
答案 0 :(得分:0)
我可以看到两个符合您描述的选项。
选项1 :
您可以像这样为组合框设置自动完成属性:
comboBox1.DataSource = dt;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "VALUE";
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
选项2 :
使用textChanged事件输入一个新文本框:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
comboBox1.DataSource = dt; //your origin data
}
else
{
var newTable = dt.AsEnumerable()
.Where(x => x.Field<string>("VALUE").ToUpper().Contains(textBox1.Text.ToUpper()))
.CopyToDataTable();
comboBox1.DataSource = newTable;
}
}
答案 1 :(得分:0)
您可以将组合框的值存储在数组中,并在该数组中搜索项目。使用以下方法
//Declare a list of string in the general declarations section of the form as follows
List<string> liststr = new List<string>();
//Add this line when populating the combo box
liststr.Add(produiItem);
//under the text changed event of the combo box, add these lines of code.
cbProduit.Items.Clear;
foreach (string search in liststr)
{
if (search.StartsWith(cbProduit.Text)) {
cbProduit.Items.Add(search);
}
}
答案 2 :(得分:0)
尝试此搜索无需数据库
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> <p>Use this area to provide additional information.</p> <select id="drop" class="js-example-basic-single" style="width:200px;">
<option>Hiii</option>
<option>I</option>
<option>Am</option>
<option>Doing</option>
<option>Asp</option>
<option>MVC</option>
</select>
<script>$(document).ready(function () {
$('.js-example-basic-single').select2(); });