【问题标题】:Form fields to populate gridview without database无需数据库即可填充 gridview 的表单字段
【发布时间】:2020-01-21 16:02:34
【问题描述】:

我需要构建一个函数来从表单对象(例如下拉列表和文本字段)向网格视图动态添加行。
我需要在不接触数据库的情况下执行此操作。
而且我需要让用户能够一次添加多行。 到目前为止,这是我想出的。 我在 if

上得到一个空引用
    var dt = new DataTable();

    dt = GridView1.DataSource as DataTable;

    if (dt.Columns.Count == 0)
    {
        dt.Columns.Add("Field");
        dt.Columns.Add("Value");
    }

    DataRow dr = dt.NewRow();
    dr["Field"] = DropDownList1.SelectedValue;
    dr["Value"] = TextBox2.Text.Trim();

    dt.Rows.Add(dr);

    GridView1.DataSource = dt;
    GridView1.DataBind();

【问题讨论】:

  • 您打算只运行此代码一次,还是每个新行运行一次?
  • 用户将填写下拉列表和文本框。这些值需要添加到gridview。我正在尝试使用数据表将信息从表单对象移动到网格视图。我现在遇到的问题是表单只是替换而不是添加新行。

标签: c# asp.net gridview datatable


【解决方案1】:

尝试使用ViewState 变量而不是拉取数据源。行可能有奇怪的东西......

设置.DataBind()查看状态:ViewState["GV1_DT"] = dt;

使用var dt = ViewState["GV1_DT"] as DataTable; 拉动 然后您可以通过执行以下操作合并您的空检查:var dt = (ViewState["GV1_DT"] as DataTable) ?? new DataTable();

完整代码:

    var dt = (ViewState["GV1_DT"] as DataTable) ?? new DataTable(); // -- PULL

    if (dt.Columns.Count == 0)
    {
        dt.Columns.Add("Field");
        dt.Columns.Add("Value");
    }

    DataRow dr = dt.NewRow();
    dr["Field"] = DropDownList1.SelectedValue;
    dr["Value"] = TextBox2.Text.Trim();

    dt.Rows.Add(dr);

    ViewState["GV1_DT"] = dt;    // -- SET
    GridView1.DataSource = dt;
    GridView1.DataBind();

【讨论】:

    【解决方案2】:

    我不确定你的想法

    var dt = new DataTable();
    dt = GridView1.DataSource as DataTable;
    

    正在做,但它正在将 null 分配给 dt(因为 GridView1.DataSource 为 null)

    试试:

    var dt = GridView1.DataSource as DataTable;
    if (dt == null) 
    {
        dt = new DataTable();
        GridView1.DataSource = dt;
    }
    

    以后遇到空引用错误时,添加断点,检查行中每个变量的值,看看哪个是空的。

    【讨论】:

    • 我不同意。我认为他正试图从 gridview 中获取当前数据源,向该变量添加一个新行,然后重新绑定它。这个是对的,只要返回null就需要初始化
    • @dvo - 也许,但似乎为空,他在上一行初始化了dt。我将编辑我的答案以处理这两个问题。
    • 是的,他仍然想念那个。我只是认为在您建议的地方设置数据源是不正确的。
    • @dvo - 好点,设置数据源应该只做一次,而添加行可能会做多次。
    • 正确 - 我相信 OP 正在寻找一次添加一行的能力。我想你已经用这个答案解决了他的 NULL Reference 异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2011-03-06
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多