【问题标题】:Filling up a datagridview row with variables set for each cell用为每个单元格设置的变量填充 datagridview 行
【发布时间】:2014-10-21 00:54:53
【问题描述】:

目前我可以将我的 Excel 工作表导入 DataGridView。 但是,当我尝试为该行的每一列添加一个基于不同变量的全新行时,它不喜欢它。

我希望使用

DataGridView1.Rows.Add(New String() {txt_id.Text, txt_name.Text, txt_modelnumber})

但是我收到一条错误消息 "附加信息:当控件是数据绑定时,行不能以编程方式添加到 DataGridView 的行集合。"

如何使它不被数据绑定?还是有其他方法来填充单元格?

我的导入代码:

    Dim MyConnection As System.Data.OleDb.OleDbConnection
    Dim DtSet As System.Data.DataSet
    Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\Lenovo\Downloads\Test\exported.xls';Extended Properties=Excel 8.0;")
    MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Products$]", MyConnection)
    MyCommand.TableMappings.Add("Table", "Net-informations.com")
    DtSet = New System.Data.DataSet
    MyCommand.Fill(DtSet)
    DataGridView1.DataSource = DtSet.Tables(0)
    MyConnection.Close()

【问题讨论】:

  • 您需要将行添加到您指定的对象是datagridview的数据源而不是datagridview本身
  • 我会看看我是否可以阅读数据源并添加行,但是我现在很困惑。我的数据源只是从 xlsx 文件中导入的。是否可以采用“DataGridView1.Rows.Add”的方式,或者我必须明确地采用另一种方式?如果不是这个,在什么情况下会使用“DataGridView1.Rows.Add”?
  • 您必须在某处分配datagridview1.datasource = ?????。你要它做什么?显示您用于将 Excel 工作表导入网格的代码。 DataGridView1.Rows.Add 在您的网格未绑定到数据源时使用,因为错误状态
  • 因此您需要将行添加到 DataTable DtSet.Tables(0) 而不是网格。新行将自动显示在网格中。
  • 我已将我的导入代码添加到主要问题中。看来我的数据源是正在填充来自 excel 表的信息的数据集。是否可以使其不绑定到数据源,所以我只需导入我的数据,然后从那里不再链接。或者类似的东西?

标签: .net vb.net excel datagridview


【解决方案1】:

我尝试了 Matt Wilko 发布的另一种方法,但我无法掌握如何使用它。所以我在 microsoft library 上查找了它,发现了一些完美的东西。

    Dim table As DataTable = DtSet.Tables(0)
    Dim newRow As DataRow = table.NewRow()
    newRow("Product ID") = lastproductid + 1
    newRow("Name") = txt_name.Text
    table.Rows.Add(newRow)

http://msdn.microsoft.com/en-us/library/system.data.datatable.rows(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

【讨论】:

  • 这使用了我在答案中链接到的方法。
【解决方案2】:

一旦将 DataSource 分配给 DataGridView,就不能直接向 DataGridView 添加行,必须将它们添加到 DataSource。

在您的情况下,您需要将行添加到 DataTable dtSet.Tables(0)

见:how to add new rows into a datatable vb.net

您唯一的其他选择是将 DataTable 中的所有行手动添加到网格中,如下所示:

For each dr As DataRow In dtSet.Tables(0).Rows
    DataGridView1.Rows.Add(New String() {dr.Item(0).ToString, etc})
Loop

【讨论】:

  • 我尝试了第一个选项,但是我得到的唯一结果是它完全清空了导入的 datagridview 并替换为我设置的行。不过我现在试试第二种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多