无需数据库即可填充 gridview 的表单字段

Form fields to populate gridview without database

我需要构建一个函数,以将行从下拉列表和文本字段等表单对象动态添加到 gridview。
我需要在不接触数据库的情况下执行此操作。
我需要让用户能够一次添加多行。 到目前为止,这是我想出的。 我在 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();

我不确定你怎么想

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;
}

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

尝试使用 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();