【问题标题】:How to convert datagridview (not datasource) to datatable without loop?如何在没有循环的情况下将datagridview(不是数据源)转换为数据表?
【发布时间】:2022-09-28 09:42:06
【问题描述】:

我在 button_click 事件中一一添加行 datagridview,我添加:

Dgv.Rows.Add() 

现在我需要在没有循环的情况下将 Dgv 转换为数据表,这可能吗?

我在 Visual Studio 2012 中使用 vb.net,

谢谢

  • 为什么不首先使用 DataTable 作为 DataGridView 的 DataSource? -- 这是什么要求:无环?
  • @Jimi我正在更新应用程序,如果数据源从数据表中更改,将非常不方便
  • 为什么?你不能在添加这些行的过程中更改[DataTable].Rows.Add() 中的Dgv.Rows.Add() 吗?我的第二个问题呢?
  • \“我需要将 Dgv 转换为不带循环的数据表\”.首先,没有转换。您需要创建一个DataTable,添加适当的列,然后从网格中读取数据并填充DataTable。其次,您编写的代码不一定必须包含显式循环,仍然会在幕后进行循环。您可以使用 LINQ 查询来获取数据,然后可能使用 ForEach 方法来填充表,但是您会降低代码的效率并且难以阅读,同时在调用的方法中仍然会发生循环。
  • 为什么绑定DataTable 不方便?除了创建和绑定它之外,您甚至可能不需要做任何其他事情,尽管您可能应该这样做。

标签: c# vb.net visual-studio


【解决方案1】:

使用 DataTable 填充您的 DGV,然后根据需要轻松将数据检索到新的 DataTable 中。

例子:

DataTable dataTable = new DataTable();
        dataTable.Columns.Add("id");
        dataTable.Columns.Add("Name");
        dataTable.Columns.Add("address");
        dataTable.Columns.Add("phone");


        DataRow row = dataTable.NewRow();
        row["id"] = 1;
        row["name"] = "test1";
        row["address"] = "a";
        row["phone"] = 1;

        dataTable.Rows.Add(row);
        dataGridView1.DataSource = dataTable;

要从网格中检索数据(无论是否更改):

DataTable dataTableDGV = (DataTable)dataGridView1.DataSource;

【讨论】:

    【解决方案2】:

    那里! 你可以试试这个:

    Private Sub SurroundingSub()
        Dim dt As DataTable = New DataTable()
    
        For Each col As DataGridViewColumn In dgv.Columns
            dt.Columns.Add(col.Name)
        Next
    
        For Each row As DataGridViewRow In dgv.Rows
            Dim dRow As DataRow = dt.NewRow()
    
            For Each cell As DataGridViewCell In row.Cells
                dRow(cell.ColumnIndex) = cell.Value
            Next
    
            dt.Rows.Add(dRow)
        Next
    End Sub
    

    【讨论】:

    • 这掩盖了错误的代码,它不能解决问题。数据网格不是容器。它们绑定到数据表,而不是相反。网格没有足够的信息来重新创建创建它的数据表
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2019-02-16
    • 2020-11-20
    相关资源
    最近更新 更多