【问题标题】:Listview to datatable列表视图到数据表
【发布时间】:2013-03-16 13:33:54
【问题描述】:

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

我已经尝试如下

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()); 
}

当我检索行数和列数时,我得到行数作为列数,列数作为行数

不知道怎么回事..
请帮帮我
最好的问候
包子

【问题讨论】:

  • 你的listView绑定了什么?你有那个来源吗?

标签: c# database winforms listview datatable


【解决方案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);
}

【讨论】:

    【解决方案2】:

    你做错了。您需要 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());
           }
    }
    

    【讨论】:

      【解决方案3】:
       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);
                  }
      

      【讨论】:

        【解决方案4】:

        您可以使用 ItemsSource 属性和 System.Data 类 (ADO.Net) 将列表视图绑定到数据表和虎钳(您想要的)。以下代码将为您提供来自现有绑定 ListView 控件的数据表。

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

        Manish Mishra 询问您的列表视图控件绑定到什么。这个问题问得好。我的回答假设它已经绑定到数据表。

        【讨论】:

        • 根据您的回答,我得到了这个异常无法将类型为“System.Collections.ObjectModel.ObservableCollection`1[ClinicManagment.Statistics.Doctor]”的对象转换为“System.Data.DataView” .
        【解决方案5】:

        来自 VB.Net 的工作代码:只需将您的列表视图名称替换为“LVActions”

                Dim it As Integer = 0
                Dim dt As New DataTable
                For it = 0 To LVActions.Items(0).SubItems.Count - 1
                    Dim DCOL As New DataColumn(LVActions.Columns(it).Text)
                    dt.Columns.Add(DCOL)
                Next
                For it = 0 To LVActions.Items.Count - 1
                    Dim DROW As DataRow = dt.NewRow
                    For j As Integer = 0 To LVActions.Items(it).SubItems.Count - 1
                        DROW(LVActions.Columns(j).Text) = LVActions.Items(it).SubItems(j).Text
                    Next
                    dt.Rows.Add(DROW)
                Next
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多