Как искать через C# DropDownList программно
Мне трудно понять, как кодировать серию операторов "if", которые ищут в разных раскрывающихся списках определенное значение, введенное в текстовое поле. Я смог написать код, который находит определенное значение в каждом раскрывающемся списке; но, прежде чем это произойдет, мне нужно добавить оператор "if", говорящий: "если dropdownlist не содержит определенного значения, перейдите к следующему оператору if и так далее". Ниже приведен пример того, что у меня есть до сих пор:
if (dropdownlist1.SelectedValue == textbox1)
{
dropdownlist1.SelectedIndex = dropdownlist1.items.indexof(dorpdownlist1.items.findbyvalue(textbox1.text) ...
if (dropdownlist2.SelectedValue == textbox1)
{
dropdownlist2.SelectedIndex = dropdownlist2.items.indexof(dorpdownlist2.items.findbyvalue(textbox1.text) ...
etc...
что это читает или сканирует первое значение или индекс в каждом раскрывающемся списке, основываясь на моей записи в textbox1. К сожалению, он идентифицирует только первое значение или индекс. Мне нужно выяснить, как сканировать весь раскрывающийся список для всех значений для каждого оператора "if", чтобы найти соответствующее значение textbox1. У кого-нибудь есть предложения?
спасибо,
DFM
8 ответов
foreach (ListItem li in dropdownlist1.Items)
{
if (li.Value == textBox1.text)
{
// The value of the option matches the TextBox. Process stuff here.
}
}
Это мое предложение о том, как увидеть, находится ли значение в раскрывающемся списке.
на DropDownList наследует предметы коллекция от элементе управления listcontrol. Так как элементы массива, вы можете использовать следующий синтаксис:
dropdownlist1.Предметы.Содержит(элемент textbox1.Текст) как логическое.
Я бы сделал список раскрывающихся окон, а затем использовал linq для выбора на нем.
List<DropDownList> list = new List<DropDownList>();
list.Item.Add(dropdown1);
list.Item.Add(dropdown2);
.... (etc)
var selected = from item in list.Cast<DropDownList>()
where item.value == textBox1.text
select item;
представленные решения работают, если вы хотите найти точное значение в загруженном combobox.
Это решение также ищет частичные значения. Он использует кнопку "Поиск" и текстовая часть выпадающего списка в качестве критериев поиска
Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
' query the dropdown object
''''''''''''
' part 9457 is a "contains" sample
' part 111 is a "startswith" sample
Dim query As IEnumerable(Of [Object]) = _
From item In cboParts.Items _
Where (item.ToString().ToUpper().StartsWith(cboParts.Text.ToUpper())) _
Select (item)
' show seached item as selected item
cboParts.SelectedItem = query.FirstOrDefault()
' "startswith" fails, so look for "contains"
If String.IsNullOrEmpty(cboParts.SelectedItem) Then
Dim query1 As IEnumerable(Of [Object]) = _
From item In cboParts.Items _
Where (item.ToString().ToUpper().Contains(cboParts.Text.ToUpper())) _
Select (item)
' show seached item as selected item
cboParts.SelectedItem = query1.FirstOrDefault()
If String.IsNullOrEmpty(cboParts.SelectedItem) Then
MsgBox("Part is not in dropdown list")
End If
End If
Я пытался найти элемент по тексту в раскрывающемся списке. Я использовал код ниже, он работает:)
ListItem _lstitemTemp = new ListItem("Text To Find In Dropdownlist");
if(_DropDownList.Items.Contains(_lstitemTemp))
{
dosomething();
}
вы можете просто сделать такой.
if (ddl.Items.FindByValue("value") != null) {
ddl.SelectedValue = "value";
};
одна строка кода-разделение для readablilty.
this.DropDownList1.SelectedItem = this.DropDownList1.Items
.SingleOrDefault(ddli => ddli.value == this.textbox1.value);
Если вы не хотите использовать LINQ:
List<ComboBox> dropDowns = new List<ComboBox>();
dropDowns.Add(comboBox1);
dropDowns.Add(comboBox2);
bool found = false;
ComboBox foundInCombo = null;
int foundIndex = -1;
for (int i = 0; i < dropDowns.Count && found == false; i++)
{
for (int j = 0; j < dropDowns[i].Items.Count && found == false; j++)
{
if (item == textBox1.Text)
{
found = true;
foundInCombo = dropDowns[i];
foundIndex = j;
}
}
}