【问题标题】:Cannot fill temporary table from gridview无法从 gridview 填充临时表
【发布时间】:2014-08-08 13:26:38
【问题描述】:

在 gridview => 数据库更新功能期间,我使用逐列转换为字符串,以便将数据作为整个命令字符串传递回我的数据库。我知道这听起来很复杂,所以这里是一个例子:

正在使用的类:
InvoiceHandler.cs
Default.aspx.cs

由于这是一个相当大的 sn-p,所以这里是一个 pastebin:

Default.aspx.cs: http://pastebin.com/Y3fJZ36Z

InvoiceHandler.cs: http://pastebin.com/ZsdAnDxr

在转换的第一个点 (invoiceTableEdited.Columns["Column1"].ColumnName = "@K_INV";) 我收到 NullReferenceException 错误,推测是因为 Default.aspx.cs 中的方法调用

handler.invoiceTableEdited = ViewState["invoiceTable"] as DataTable; handler.invoiceTableEdited.Rows[row.RowIndex]["K_INVOICE"] = sK_INVOICE;

似乎遇到了麻烦。

我必须怎么做才能解决这个问题?

【问题讨论】:

  • “似乎有问题”不是很有帮助。尝试告诉我们错误或当前结果与预期结果。
  • 看起来您遇到了异常,因为您在没有创建任何列的情况下尝试为 invoiceTableEdited 的列集合中的列分配名称。
  • @sr28 你确定吗?在 Default.aspx.cs 中,在 OnUpdate 方法中,我在 GridView?中的行之外创建这些列?
  • 我的错误。但是,在 Default.aspx.cs 中,您正在创建 ["column1"] 等,而在 InvoiceHandler.cs 中,您尝试将名称分配给 ["Column1"]。尝试将其更改为 ["column1"]。
  • @sr28 我会忽略列名。我不得不匆忙更改它们以使它们匿名。

标签: c# asp.net gridview datatable nullreferenceexception


【解决方案1】:

说实话,目前还不清楚您是如何尝试为“InvoiceTableEdited”表创建列集合的。您在 OnUpdate 中所做的看起来像是将字符串变量分配给表中具有给定索引的行和当前不存在的列。您的基本说法是将此字符串放入行号为“x”且列名为“column1”的单元格中。此时“column1”不存在。

我会像这样在 InvoiceHandler.cs 中创建您首先需要的列(假设它们是字符串):

invoiceTableEdited.Columns.Add("MyColumn1", typeof(string));
invoiceTableEdited.Columns.Add("MyColumn2", typeof(string));

显然,如果您有很多列并且您不关心它们的名称,那么只需创建一个循环并以这种方式添加它们。这将为它们提供命名约定“ColumnN”,其中“N”是数字。然后,您可以通过引用那里的名称(例如“Column1”)或使用它们的索引来为它们分配一个名称。

【讨论】:

  • 我查看了这实际上在做什么,并意识到我不需要额外的表。事实上,我已经在onupdate() 的开头将gridview 中的数据提取为字符串,所以我正在使用它们。非常感谢您的帮助,您说得对,内存中不存在必需的列。
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2018-04-05
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多