代码之家  ›  专栏  ›  技术社区  ›  Grzenio

在ListView(WinForms)中创建int列

  •  2
  • Grzenio  · 技术社区  · 16 年前

    是否可以在ListView中创建整数(或DataTime等)列?这非常重要,因为我希望根据此列对列表进行适当的排序。

    向我找到的ListViewItem添加子项的唯一方法是:

    listviewitem.SubItems.Add("1");
    

    我希望避免解析这些字符串以获得每种类型的int表示!

    4 回复  |  直到 6 年前
        1
  •  3
  •   Hans Passant    16 年前

    您可以使用标记属性。这些小助手函数负责处理它:

    private void setListItem(int row, int column, int value) {
      ListViewItem.ListViewSubItem item = listView1.Items[row].SubItems[column];
      item.Tag = value;
      item.Text = value.ToString();
    }
    private int getListItem(int row, int column) {
      return (int)listView1.Items[row].SubItems[column].Tag;
    }
    
        2
  •  1
  •   Tim Cooper    13 年前

    而不是只向列表中添加字符串并使用 .Text 财产。

    例子:

    int a = 0;
    listView1.Items.Add(a.ToString());
    

    int a = Convert.ToInt32(listView1.Items[0].SubItems[0].Text);
    

    你也可以这么做 DataTime 和其他数据类型,只需将它们转换为 String 类型。

    如何解释包含日期的列,这完全取决于您。 只需实现您的特定排序算法 ListView 列。

        3
  •  0
  •   Arjun Rao    16 年前

    我认为我们有一个整数类型的列,就像我们在DataGrid中的列一样,实际上我不知道ListView控件。如果你找到答案请告诉我。

        4
  •  0
  •   Jimi    6 年前

    按此链接操作:
    How to sort a ListView control by a column in Visual C#

    然后是函数 Compare :
    (根据您对列数据类型的数据类型要求,添加以下开关大小写)

    public int Compare(object x, object y)
    {
        //(...)
        switch (ColumnToSort)
        {
            case 2:
                compareResult = objectComparer.Compare(DateTime.Parse(listviewX.SubItems[ColumnToSort].Text), DateTime.Parse(listviewY.SubItems[ColumnToSort].Text));
                break;
            case 3:
                compareResult = objectComparer.Compare(float.Parse(listviewX.SubItems[ColumnToSort].Text.Replace("kb", "").Replace("mb", "")), float.Parse(listviewY.SubItems[ColumnToSort].Text.Replace("kb", "").Replace("mb", "")));
                break;
    
            default:
                compareResult = objectComparer.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
                break;
        }
        //(...)
    }