我有一个用以下代码填充的ListView。询问您是否可以看到,我同时设置了DisplayMember和ValueMember。我想要做的是通过其ValueMember查找ListViewItem。因此,基本上我正在寻找的是ListViewItem.Value。我知道我可以为ListView本身获取SelectedValue,但是我只是没有看到ListViewItem上的任何属性能提供我想要的东西。我只是在想什么吗?还是没有办法做到这一点?
private void PopulateList(Globals.DataFieldMappingTypes mappingType)
{
ListBox lst = GetListBox(mappingType);
ComboBox cbo = cboh.GetComboBox(new ComboBoxHandler.CboInfo(Globals.NodeTypes.DataField, mappingType));
string sql = "select DataFieldReferenceValueId, [Value] from DataFieldReferenceValueInfo where DataFieldId = " + cbo.SelectedValue.ToString();
DataTable tbl = dal.GetTable(sql, "DataFieldReferenceValue");
lst.DisplayMember = "Value";
lst.ValueMember = "DataFieldReferenceValueId";
lst.DataSource = tbl.DefaultView;
}
答案 0 :(得分:0)
我想我认为您没有从DataTable中正确获取值。 我希望tbl.Rows [0] [0] .ToString()将具有DataFieldReferenceValueId和 tbl.Rows [0] [1] .ToString()将具有[值]
请检查下面的MSDN链接 this version
答案 1 :(得分:0)
为什么不直接将dataTable作为dataSource加载,为什么不创建一个类来定义值?
public class SqlTable
{
public string Name {get;set;}
public string Value {get;set;}
}
var listPair = new List<SqlTable>();
然后使用SqlDataReader加载列表,并使用LINQ获取所需的对。
while (sdr.Read())
{
listPair.Add(new SqlTable() { Name = sdr[0].ToString(), Value = sdr[1].ToString() });
}
lst.DisplayMember = "Name";
lst.ValueMember = "Value";
lst.DataSoure = listPair;
SqlTable sqlTable = listPair.Find(x => x.Name == "Whatever name you are searching for") as SqlTable;
现在,您正在搜索SqlTable项,您可以通过以下操作获得其属性:
string value = sqlTable.Value;
string name = sqlTable.Name;
从评论编辑从此处开始:
您的第一个问题是示例中的“ lst”项是ListBox而不是ListView。如果您将其切换到列表视图,则仍可以像这样输入listPair项目的列表:
ListView lst = new ListView();
lst.View = View.Details;
foreach (var data in listPair)
{
lst.Items.Add(new ListViewItem(listPair.Name, listPair.Value);
}
因此,现在您有了一个ListView,它是listPair的集合,其中每个listPair是一个ListViewItem。我假设您想根据您的值(或listPair.Value或sdr [1]或[Value]现在都相同)隔离ListViewItem以便为其着色。您现在可以像这样抓取listPair项目:
SqlTable pair = listPair.Find(x => x.Value == "Whatever the Value value is that you want to color");
ListViewItem searchedItem = lst.FindItemWithText(pair.Name);
searchedItem.BackColor = System.Drawing.Color.Red; //or whatever color you choose
您现在可以使用searchedItem在ListView及其所有其他属性中获取其索引。 ListPair仅允许您关联值。