【问题标题】:Insert into an empty database table using asp.net使用 asp.net 插入一个空的数据库表
【发布时间】:2014-05-27 18:25:23
【问题描述】:

从一个使用 DetailsView 控件的 asp.net Web 应用程序,我可以允许用户将行插入到我们的 SQL 数据库表中。但是,如果表为空,DetailsView 将在更改为插入模式时抛出错误。 System.Collections.ArrayList.InsertRange(Int32 index, ICollection c) +10647211出现错误:

说明:在执行当前网络请求期间发生未处理的异常。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常 详细信息:System.ArgumentNullException:集合不能为空。参数名称:c

我可以手动创建 DetailsView <EmptyDataTemplate> 以插入到特定表中,但我正在处理用户动态选择的无数表。

我的 DetailsView 和 GridView 控件会根据用户选择的表格自动生成视图。我想要一个插入控件,它可以根据用户选择的表格自动生成文本框/标签。

有没有办法避免为每个空表创建模板以允许插入?

编辑: 我的 DetailsView 控件正在使用 LinqDataSource,如果我尝试绑定到一个空表,我会收到相同的 ArugmentNullException 错误。

【问题讨论】:

标签: c# asp.net sql


【解决方案1】:

使用FormView 控件。如果表为空,它将允许您插入新行。

【讨论】:

  • 是的,但我不是还需要为每个空表勾勒出一个模板吗?和我的 DetailsView 和 GridView 一样,我希望 FormView 根据用户选择的表格自动生成。
  • 我想我的回答过激了。我认为您收到的 Null Reference Exception 可能是回发期间的逻辑错误。如何发布您如何绑定到数据库表以及您是使用自定义数据访问逻辑还是 ObjectDataSource/SqlDataSource?
  • DetailsView 正在使用 LinqDataSource
【解决方案2】:

我找到了自己的解决方法,这是一个丑陋的解决方案,但可以。

我添加了一些 SQLDataSources,它们在用户插入空表时插入临时虚拟记录。存在虚拟记录允许将 DetailsView 控件绑定到 DataBind,然后在不再需要时将其删除。

此解决方案不适用于添加到数据库的任何新空表。拥有临时虚拟记录的影响,即使是很短的时间,也不完全清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2016-02-27
    相关资源
    最近更新 更多