2011-01-04 3 views
2

DataGridView имеет свойство «DataSource», которое можно просто присвоить DataTable, чтобы заполнить его. Это означает, что нам не нужно беспокоиться об именах/количестве столбцов в DataTable.Есть ли простой способ заполнить ListView с помощью DataTable?

Но, я не нашел аналогичного способа заполнения ListView. Кажется, вам нужно знать, сколько столбцов имеет DataTable, и имена каждого из них для этого, что делает его намного сложнее.

Может ли кто-нибудь предложить простой способ заполнить ListView, как мы можем с помощью DataGridView?

+1

Учитывая DataTable, вы прекрасно знаете количество колонок и их имена - это свойство в столбце. Почему, по вашему мнению, сложно заполнить ListView таким образом? –

+1

Почему бы просто не использовать 'DataGridView'? – leppie

ответ

3
private void LoadList() 
{ 
    // Get the table from the data set 
    DataTable dtable = _DataSet.Tables["Titles"]; 

    // Clear the ListView control 
    listView1.Items.Clear(); 

    // Display items in the ListView control 
    for (int i = 0; i < dtable.Rows.Count; i++) 
    { 
     DataRow drow = dtable.Rows[i]; 

     // Only row that have not been deleted 
     if (drow.RowState != DataRowState.Deleted) 
     { 
      // Define the list items 
      ListViewItem lvi = new ListViewItem(drow["title"].ToString()); 
      lvi.SubItems.Add (drow["title_id"].ToString()); 
      lvi.SubItems.Add (drow["price"].ToString()); 
      lvi.SubItems.Add (drow["pubdate"].ToString()); 

      // Add the list items to the ListView 
      listView1.Items.Add(lvi); 
     } 
    } 
} 

Найти сортировки и т.д. также на - http://www.akadia.com/services/dotnet_listview_sort_dataset.html

Modified -

// Clear the ListView control 
      listView1.Items.Clear(); 
      int ColCount = dtable.Columns.Count; 
      //Add columns 
      for (int k = 0; k < ColCount; k++) 
      { 
       listView1.Columns.Add(dtable.Columns[k].ColumnName); 
      } 
      // Display items in the ListView control 
      for (int i = 0; i < dtable.Rows.Count; i++) 
      { 
       DataRow drow = dtable.Rows[i]; 

       // Only row that have not been deleted 
       if (drow.RowState != DataRowState.Deleted) 
       { 
        // Define the list items 
        ListViewItem lvi = new ListViewItem(drow[0].ToString()); 
        for (int j = 1; j < ColCount; j++) 
        { 
         lvi.SubItems.Add(drow[j].ToString());       
        } 
        // Add the list items to the ListView 
        listView1.Items.Add(lvi); 
       } 
      } 
+0

Этот код, который вы отправили, зависит от имен столбцов .... не так ли? – odiseh

+0

Добавлен отредактированный, когда вы не знаете названия столбцов. –

2

ObjectListView - с открытым исходным кодом оберткой ListView .NET WinForms - имеет DataListView подкласс, который делает именно то, это.

Вы можете дать ему источник данных (который может быть DataView, DataTable, DataSet, DataViewManager или BindingSource), и он будет автоматически создавать столбцы и заполнить строки, чтобы полностью функциональный вид списка , Вам просто нужна одна строка кода:

this.dataListView1.DataSource = ds1.Tables["Persons"];