Поля формы для заполнения gridview без базы данных - PullRequest
1 голос
/ 20 сентября 2019

Мне нужно создать функцию для динамического добавления строк в сетку из объектов формы, таких как выпадающие списки и текстовые поля.
Мне нужно сделать это, не касаясь базы данных.
И мне нужно дать пользователюВозможность добавлять несколько строк по одной за раз.Это то, что я придумал до сих пор.Я получаю нулевую ссылку на 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();

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Я не уверен, что вы думаете

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

делает, но присваивает ноль dt (потому что GridView1.DataSource равно нулю)

Попробуйте:

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

В будущем, когда вы получите ошибку нулевой ссылки, добавьте точку останова и проверьте значение каждой переменной в строке, чтобы увидеть, какая из них равна нулю.

0 голосов
/ 20 сентября 2019

Попробуйте переменную 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...