2013-03-16 59 views
2

我有一个列表视图,我需要将行和列加载到数据表。Listview to datatable

我已经试过如下

DataTable dt = new DataTable(); 

foreach (ListViewItem item in listView1.Items) 
{ 
    table.Columns.Add(item.ToString()); 
    foreach (var it in item.SubItems) 
     dt.Rows.Add(it.ToString()); 
} 

当我检索到的行数和列数,然后我得到的行号列数和行数

不知道发生了什么事情列数..
请帮我
问候
Bunzitop

+0

你的listView绑定了什么?你有那个来源? – 2013-03-16 13:54:04

回答

0

你这样做是错的。您需要1 + listView1.Items[0].SubItems.Count列在您的DataTable(1是ListViewItem和其他子项)和listView1.Items.Count行数。因此,你的代码应该是这样的:

if (listView1.Items.Count > 0) 
{ 
     dt.Columns.Add(); 
     foreach (ListViewItem.ListViewSubItem lvsi in listView1.Items[0].SubItems) 
       dt.Columns.Add(); 
     //now we have all the columns that we need, let's add rows 
     foreach (ListViewItem item in listView1.Items) 
     { 
       List<string> row = new List<string>(); 
       row.Add(item.ToString()); 
       foreach (var it in item.SubItems) 
        row.Add(it.ToString()); 
       //Add the row into the DataTable 
       dt.Rows.Add(row.ToArray()); 
     } 
} 
0
DataTable table = new DataTable(); 

      table.Columns.Add("MODUL", typeof(string)); 
      table.Columns.Add("ACIKLAMA", typeof(string)); 
      table.Columns.Add("UZUNLUK", typeof(string)); 
      table.Columns.Add("GENISLIK", typeof(string)); 
      table.Columns.Add("MIKTAR", typeof(string)); 

      for (int i = 0; i < listView2.Items.Count; i++) 
      { 
       table.Rows.Add(listView2.Items[i].SubItems[1].Text, listView2.Items[i].SubItems[2].Text, listView2.Items[i].SubItems[3].Text, listView2.Items[i].SubItems[4].Text, listView2.Items[i].SubItems[5].Text); 
      } 
1

它在很久以前,但有人可能会在未来的奋斗这件事, 所以这里是我的解决方案到ListView转换成一个DataTable:

DataTable dtZeitplan = new DataTable(); 
foreach (ColumnHeader chZeitplan in lvZeitplan.Columns) 
{ 
    dtZeitplan.Columns.Add(chZeitplan.Text); 
} 
foreach (ListViewItem item in lvZeitplan.Items) 
{ 
    DataRow row = dtZeitplan.NewRow(); 
    for(int i = 0; i < item.SubItems.Count; i++) 
    { 
     row[i] = item.SubItems[i].Text; 
    } 
    dtZeitplan.Rows.Add(row); 
} 
0

您可以使用ItemsSource属性和System.Data类(ADO.Net)将listview绑定到数据表和vise-verse(您想要的)。下面的代码将为您提供一个来自现有绑定ListView控件的数据表。

DataView theDataView = (DataView)theListView.ItemsSource; 
DataTable theDataTable = theDataView.Table; 

Manish Mishra问你的listview控件绑定了什么。这个问题问得好。我的答案假设它已经绑定到数据表。

+0

根据你的回答,我得到了这个异常无法投射'System.Collections.ObjectModel.ObservableCollection'1 [ClinicManagment.Statistics.Doctor]'类型的对象来键入'System.Data.DataView'。 – FatemehEbrahimiNik 2017-05-13 04:37:58