表单字段在没有数据库的情况下填充网格视图

我需要构建一个函数来动态地将行从表单对象(例如下拉列表和文本字段)添加到网格视图。

我需要在不接触数据库的情况下执行此操作。

我需要让用户能够一次添加多行。 这是我到目前为止所想出的。 我在 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();


ibeautiful
浏览 44回答 2
2回答

FFIVE

我不确定你的想法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;Pull var dt = ViewState["GV1_DT"] as DataTable; 然后您可以通过执行以下操作合并 null 检查: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();
打开App,查看更多内容
随时随地看视频慕课网APP