触发保存事件时,添加到gridview的行不会保留

时间:2018-06-26 21:57:40

标签: asp.net gridview webforms

我的网页上有一个gridview,可以动态添加行。有一个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);
        }          
    }

添加行并将其更改为默认值后,将循环浏览这些行并将数据保存到数据库。当触发页面的保存事件时,让添加到gridview的行持久存在并存在于gridview时出现问题。该代码如下所示:

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 :(得分:0)

对GridView进行DataBind()编辑时,将根据GridView的DataSource“重建” GridView的内容。如果您需要将新行保留在GridView中,请不要在添加新行后调用DataBind(),或者确保在以后调用之前将新行的内容包含在GridView的DataSourceDataBind()

在有类似情况的情况下,我写了一页,后来写了。初始行的数据是在第一页加载时从数据库中提取的,并保留在ViewState中。当用户在GridView中添加,删除和重新排序行时,页面仅更改了ViewState中的数据并重新DataBind()重新设置了GridView。