2012-03-16 45 views
17

我目前正在努力與我的應用程序的GUI。我很難弄清楚ListBox或ListView是否更適合用於多列數據表示。ListView與列表框多列使用

我更喜歡「乾淨」的代碼,因爲意大利麪條代碼和黑客方法可能會導致混淆,所以不要太混亂。

ListBox和ListView如何處理多個列?

+2

「DataGridView」怎麼樣? – 2012-03-16 19:46:08

+0

@BryanCrosby,即時處理列表數據。我明白DataGridView適用於數據庫數據。 – JavaCake 2012-03-16 20:23:51

+0

你說你有多列表示。這是一張桌子,這就是我推薦它的原因。你的數據結構是什麼? – 2012-03-16 20:51:53

回答

11

當然沒有什麼錯,在這種情況下一個DataGridView

樣品:

class Car 
{ 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public int Year { get; set; } 
} 

函數將數據加載到DataGridView

private void LoadData() 
{ 
    List<Car> cars = new List<Car>() 
    { 
     new Car() { Make = "Subaru", Model = "Impreza", Year = 2005 }, 
     new Car() { Make = "Ford", Model = "Mustang", Year = 1984 } 
    }; 

    dataGridView1.DataSource = cars; 
} 

當然,從這裏事情可能變得更加複雜,但是如果你只是想顯示的數據表格式......這很簡單。

+1

完美。正是我在找什麼。只需添加一行代碼即可初始化數據源,並且它具有魔力。 – JavaCake 2012-03-17 09:27:50

+1

是否可以排除任何列或更改它們的順序? – JavaCake 2012-03-17 15:08:17

+2

@JavaCake:您可以使用它們的命名索引或序號來訪問列。例如,'DataGridView.Columns [0]'。有一個屬性'DisplayIndex'控制着它們的顯示方式。還有一個控制能見度的「可見」屬性。 – 2012-03-17 16:14:12

2

ListView對於數據的多列表示要好得多。然而,它似乎比簡單的ListBox更復雜/難看的代碼。

還有很多更好的原因,可調整大小的列和所有這些。

我不認爲列表已多列,所以你不得不砍東西難看。

http://www.xtremedotnettalk.com/showthread.php?t=93443

+0

我可以在兩種類型中找到的所有示例都以一些混亂的代碼結束。但正如你所說,ListView看起來更加貼心。你能給一個多列ListView上的codesnippet嗎?謝謝。 – JavaCake 2012-03-16 19:21:44

+0

ListBox控件肯定支持[多列](http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn.aspx)。 – 2012-03-16 19:22:24

+0

「多列ListBox將項目放置到所需的列數,以便不必進行垂直滾動。」我不認爲這有幫助。 – Haedrian 2012-03-16 19:24:13

4

入住這

https://stackoverflow.com/a/227355/988830

雖然列表框用於出單列和listview被用於mutlicolumn,答案是一切取決於。

有時您可能需要多列列表,您需要添加不同類型的子項。你不能使用listview綁定它們,所以最好在這種情況下使用listbox。但是如果你想通過使用頭排序他們,請使用listview,因爲它很簡單。

最後,我會說如果你只是有多列數據,沒有什麼比使用listview更好,否則如果你想做按鈕,樹視圖,擴展器等花式的東西。ListBox真的很酷。

感謝, OMKAR

4

,如果你想能夠直接從電網編輯數據,如電子表格一個DataGridView是好的。詳細模式下的列表視圖非常適合簡單列出數據列表。就我所知,DataGridView也將更容易排序。

一般來說,我做這樣的事情:

private void UpdateListView() 
{ 
    mListView.Items.Clear(); 
    foreach (Item item in mItems) 
    { 
     ListViewItem listViewItem = 
     new ListViewItem(item.Value1.ToString()) { Tag = item; } 
     listViewItem.SubItems.Add(item.Value2.ToString()); 
     listViewItem.SubItems.Add(item.Value3.ToString()); 
     mListView.Items.Add(listViewItem); 
    } 
} 

列將必須設計定義,包括列標題文本和列寬。

With the Tag = item;一部分,您將能夠訪問所選對象:

if (mListView.SelectedIndices.Count <= 0) 
     return; 

    Item selectedItem = mListView.SelectedItems[0].Tag as Item; 
    if (selectedItem == null) 
     return; 

    // do something with selectedItem