2008-11-18 39 views
2

是否有可能在ListView中创建一个整数(或DataTime等)列?这是非常重要的,因为我想根据这一列正确地对列表进行排序。在ListView中创建一个int列(Winforms)

到子项添加到ListViewItem的,我发现的唯一方法是:

listviewitem.SubItems.Add("1"); 

我想避免解析这些字符串以获取每样中的int表示!

回答

3

您可以使用Tag属性。这些小帮手功能,照顾它:

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; 
} 
1

而不是仅仅通过使用.Text属性将字符串添加到列表中并接收字符串。

例子:

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

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

您只需将它们转换为String类型做同样的与DataTime和其它数据类型。

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

+1

好吧好吧,但这是真正的解析这些字符串.... – Grzenio 2008-11-18 17:59:08

+0

据我了解一个特定的ListView列不支持不同的数据类型可以通过一些已经实现的功能进行排序。您只需通过为特定列实现特定的软算法来自己做... – Mariusz 2008-11-18 18:04:24

0

我认为我们有整型,像我们在DataGrid中列一列,其实我也有关于ListView控件的想法。让我知道你是否找到答案。

0

请点击此链接 https://support.microsoft.com/en-us/kb/319401

那么对于功能比较

//add the following switch case as per your requirement of datatype in respect //to column datatype 
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; 
        } 
    ...... 
}