Ras*_*dit 8 c# listbox asp.net-2.0
我有一个多选列表框,我绑定到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;
Run Code Online (Sandbox Code Playgroud)
我将描述设置为DisplayMember,将值设置为ListBox的ValueMember.现在,根据传递的值,我需要在ListBox中设置所选项.
这是我的代码:
ListBox lb = c as ListBox;
lb.SelectedValue = valuePassedByUser;
Run Code Online (Sandbox Code Playgroud)
这是行不通的.因此,我不得不求助于下面的代码(我循环遍历列表框中的所有项目)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道我的代码中缺少/错误的内容.为什么lb.SelectedValue = valuePassedByUser; 选择错误的项目?
好的......这是我昨天才意识到的难以理解的答案.这是我的错,虽然我没有在我的问题中提到一件重要的事情,因为我觉得这与手头的问题无关:
数据表中的数据未排序.因此我将列表框的Sorted属性设置为true.后来我意识到当列表框甚至组合框的sorted属性设置为true时,值成员不能正确设置.所以,如果我写:
lb.SelectedValue = valuePassedByUser;Run Code Online (Sandbox Code Playgroud)
它将一些其他项设置为选中而不是设置其值为valuePassedByUser的项.简而言之,它与指数混淆.
例如,如果我的初始数据是:
Index ValueMember DisplayMember
1 A Apple
2 M Mango
3 O Orange
4 B Banana
Run Code Online (Sandbox Code Playgroud)
我设置sorted = true.然后列表框项目是:
Index ValueMember DisplayMember
1 A Apple
2 B Banana
3 M Mango
4 O Orange
Run Code Online (Sandbox Code Playgroud)
现在如果我想将Banana设置为选中,我运行stmt:
lb.SelectedValue = "B";Run Code Online (Sandbox Code Playgroud)
但不是将Banana设置为选中,而是将Orange设置为已选中.为什么?由于列表没有被排序,香蕉的索引将是4.因此即使在香蕉的排序索引为2之后,它将索引4设置为选中,从而使橙色选择而不是香蕉.
因此,对于已排序的列表框,我使用以下代码来设置所选项:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31203 次 |
| 最近记录: |