3

查找 ListView 列名称的最佳方法是什么?

我使用在此论坛上找到的过程将 DataTable 转换为 List,但我无法将 Id 列放在首位,尤其是因为并非所有 DataTable 都有“Id”列。

我可以在集合 listView.Columns.ToString() 中搜索,但我看到的格式是:

“列标题:文本:ID”

我必须对其进行解析以找到正确的名称“Id”。这看起来不像 C# 的精神。

我也试过了:listView.SelectedItems[0].SubItems["Id"] 但这不会编译。


好的,这是完整的代码。确切的问题是用户在 listView 中使用 Courier Names 和 Ids 选择了一行,但它也可能是 Ids 和 Names,按此顺序。查找所选快递员 ID 的最快方法是:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems["Id"].Text;

但这不起作用。硬编码的方式是这样的,但我不能保证有一天会使用错误的列:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems[1].Text;

使用@HuorSwords 方法会导致这个不太简单的解决方案,它对我有用,但取决于合理的假设,即列中的列顺序ColumnHeaderCollection对应于表单上的显示:

ListViewItem si = listCouriers.SelectedItems[0];
string CourierId = null;
int icol = 0;
foreach (ColumnHeader header in listCouriers.Columns)
{
    if (header.Text == "Id")
    {
        CourierId = si.SubItems[icol].Text;
        break;
    }
    icol++;
}
4

2 回答 2

6

listView.Columnstype一样ListView.ColumnHeaderCollection,它包含ColumnHeader对象。

包含列ColumnHeader.Text标题,因此您可以使用以下命令检查具体列:

foreach (ColumnHeader header in listView.Columns)
{
      if (header.Text == "Id")
      {
           // Do something...
      }
}

我不知道是否是最好的方法,但你不需要解析结果来找到“Id”值......

更新

另外,您是否尝试使用String索引器引用它?>listView.Columns["Id"]

于 2013-02-20T16:55:46.443 回答
0

使用此代码:

private ColumnHeader GetColumn(string Text)
{
    for (int i = 0; i < listView1.Columns.Count; i++)
        for (int j = 0; j < listView1.Items.Count; j++)
            if (listView1.Items[j].SubItems.Count - 1 >= i)
                if (listView1.Items[j].SubItems[i].Text == Text)
                    return listView1.Columns[i];
    return null;
}

只需将项目文本提供给此代码并获取您想要的列的所有内容。

享受 ;)

于 2013-06-26T17:28:08.810 回答