检索ListViewItem的值

时间:2019-06-13 16:54:53

标签: c# listview

我有一个用以下代码填充的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;
    }

2 个答案:

答案 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仅允许您关联值。