2008-11-18 40 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; 
        } 
    ...... 
}