Строки, добавленные в gridview, не сохраняются при запуске события сохранения - PullRequest
0 голосов
/ 27 июня 2018

На моей веб-странице есть сетка, в которую можно динамически добавлять строки. Есть цикл for, который добавляет такие строки:

protected void AddNewJob(object sender, EventArgs e)
    {
        for(int i = 0; i < Convert.ToInt32(newJobCount.Text);i++)
        {
            TableRow tr = new TableRow();
            tr.Cells.Add(ServicesDDL("-- Select Service Type --"));
            tr.Cells.Add(JobsDDL("-- Select Job Type --"));
            tr.Cells.Add(TextBoxCell());
            tr.Cells.Add(TextBoxCell());
            tr.Cells.Add(TextBoxCell());

            assetTable.Rows.Add(tr);
        }          
    }

После того, как строки добавлены и изменены по сравнению со значениями по умолчанию, строки циклически перебираются и данные сохраняются в базе данных. У меня проблемы с получением строк, добавленных в представление сетки, чтобы они сохранялись и существовали в окне сетки при запуске события сохранения страницы. Этот код выглядит так:

foreach (TableRow row in assetTable.Rows)
{

if (isFirst)
{
    isFirst = false;
    continue;
}

DropDownList service = (DropDownList)row.Cells[0].Controls[0];
string assetText = service.SelectedItem.Value;
DropDownList jobDescription = (DropDownList)row.Cells[1].Controls[0];
string serialText = jobDescription.SelectedItem.Value;
TextBox equipmentCount = (TextBox)row.Cells[2].Controls[0];
string leaseText = equipmentCount.Text;
TextBox jobSize = (TextBox)row.Cells[3].Controls[0];
string originText = jobSize.Text;
TextBox serialNo = (TextBox)row.Cells[4].Controls[0];
string deliveryText = serialNo.Text;
string oNo = orderNo.Text;

if (assetText != "0" && serialText != "0")
{
    APICallClass.Job j = new APICallClass.Job();
    j.JobTypeID = Convert.ToInt32(serialText);
    j.serviceID = Convert.ToInt32(assetText);
    j.equipment = leaseText;
    j.jobSize = originText;
    j.serialNumbers = deliveryText;
    j.orderID = Convert.ToInt32(global.GlobalID);

    APICallClass.API.AddJob(j, Session["Variable"].ToString());
}
}

Когда выполняется код, вставленный выше, он видит только те строки, которые извлечены из базы данных. Я думаю, что мою проблему можно решить, вызвав что-то вроде .databind () где-то, чем я не являюсь, но я пробовал несколько мест, и они не устранили проблему.

Заранее благодарю за любую помощь и помогаю мне стать более надежным разработчиком ASP.NET.

1 Ответ

0 голосов
/ 08 июля 2018

Когда GridView DataBind() -ed, содержимое GridView "перестраивается" на основе GridView DataSource. Если вам нужно, чтобы новая строка оставалась в GridView, либо не вызывайте DataBind() после добавления новой строки, либо убедитесь, что содержимое вашей новой строки находится в DataSource GridView до будущих вызовов DataBind().

На странице, которую я написал однажды, у меня была похожая ситуация, и я сделал последнее. Данные для начальных строк были извлечены из базы данных при загрузке первой страницы и сохранены в ViewState. Когда пользователь добавил, удалил и переупорядочил строки в GridView, страница просто изменила данные в ViewState и повторно DataBind() изменила GridView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...