gpt4 book ai didi

c# - 在不循环的情况下在列表框中设置选定的项目

转载 作者:太空狗 更新时间:2023-10-29 18:33:42 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 DataTable 的多选列表框。 DataTable 包含 2 列描述和值。

这是列表框填充代码:

DataTable copytable = null;
copytable = GlobalTable.Copy(); // GlobalTable is a DataTable
copytable.Rows[0][0] = "--ALL--";
copytable.Rows[0][1] = "--ALL--";

breakTypeList.DataSource = copytable;
this.breakTypeList.DisplayMember = copytable.Columns[0].ColumnName; // description
this.breakTypeList.ValueMember = copytable.Columns[1].ColumnName; // value
this.breakTypeList.SelectedIndex = -1;

我将 description 设置为 DisplayMember,将 value 设置为 ListBox 的 ValueMember。现在,根据传递的值,我需要在 ListBox 中设置所选项目。

这是我的代码:

ListBox lb = c as ListBox;
lb.SelectedValue = valuePassedByUser;

这是行不通的。因此我不得不求助于下面的代码(我在其中循环遍历列表框中的所有项目)

for (int i = 0; i < lb.Items.Count; i++)
{
DataRowView dr = lb.Items[i] as DataRowView;
if (dr["value"].ToString() == valuePassedByUser)
{
lb.SelectedIndices.Add(i);
break;
}
}

我想知道我的代码中缺少什么/有什么错误。为什么 lb.SelectedValue = valuePassedByUser;选择不正确的项目?

最佳答案

好吧……这是我昨天才意识到的难以理解的答案。尽管我没有在问题中提及一件重要的事情,但这是我的错误,因为我觉得它与手头的问题无关:

数据表中的数据没有排序。因此,我已将列表框的 Sorted 属性设置为 true。后来我意识到当列表框甚至组合框的排序属性设置为 true 时,值成员没有得到正确设置。所以如果我写:

lb.SelectedValue = valuePassedByUser;

它将其他一些项目设置为选中状态,而不是设置其值为 valuePassedByUser 的项目。简而言之,它会扰乱索引。

例如如果我的初始数据是:

Index   ValueMember DisplayMember
1 A Apple
2 M Mango
3 O Orange
4 B Banana

然后我设置 sorted = true。然后列表框项目是:

Index   ValueMember DisplayMember
1 A Apple
2 B Banana
3 M Mango
4 O Orange

现在如果我想将 Banana 设置为选中状态,我运行 stmt:

lb.SelectedValue = "B";

但是它没有将 Banana 设置为选中状态,而是将 Orange 设置为选中状态。为什么?因为如果列表没有被排序,Banana 的索引将是 4。所以即使在 Banana 的排序索引为 2 之后,它将索引 4 设置为选中,从而使 Orange 而不是 Banana 被选中。

因此对于排序的列表框,我使用以下代码来设置选定的项目:

private void SetSelectedBreakType(ListBox lb, string value)
{
for (int i = 0; i < lb.Items.Count; i++)
{
DataRowView dr = lb.Items[i] as DataRowView;
if (dr["value"].ToString() == value)
{
lb.SelectedIndices.Add(i);
break;
}
}
}

关于c# - 在不循环的情况下在列表框中设置选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com