使用EF更新Gridview中的记录

时间:2014-01-30 18:22:59

标签: c# asp.net entity-framework gridview

我有一个附有gridview的网页。 gridview允许用户更新单个记录。 gridview看起来像这样:

JobSiteID         JobSite1
1                 13-03
2                 13-04
3                 13-06
4                 13-09
5                 13-15

我创建了以下记录更新事件处理程序:

protected void changeJobSiteRecordsGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = changeJobSiteRecordsGridView.Rows[e.RowIndex];
    TextBox txtJobSite = row.FindControl("txtJobSite") as TextBox;

    if (txtJobSite != null)
    {
        using (ABCEntities4 Context = new ABCEntities4())
        {
            int jobSiteID = Convert.ToInt32(changeJobSiteRecordsGridView.DataKeys[e.RowIndex].Value);
            JobSite obj = Context.JobSites.First(x => x.JobSiteID == jobSiteID);
            obj.JobSite1 = txtJobSite.Text;
            Context.SaveChanges();
            changeJobSiteRecordsGridView.EditIndex = -1;
            changeJobSiteRecordsGridView.DataSource = Context.JobSites;
            changeJobSiteRecordsGridView.DataBind(); 
        }
    }
}

这是我的问题:
当我选择在第一行更新(例如第2行)时,本地“行”变量表示RowIndex == 1。 但是,在第二行中,我希望txtJobSite变量用“13-04”填充,但VS为变量赋予“null”。 结果,代码流过下面的if then语句,这不是预期的。

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

检查行的单元格属性,如下所示:

row.Cells[1].Controls[0]

为文本框。如果'0'索引不起作用,请尝试1索引。然后你的代码看起来像这样:

TextBox txtJobSite = (TextBox)row.Cells[1].Controls[1]

我记得在FindControl中遇到了类似的问题。这样,您可以在单元格中明确找到单元格,然后查找控件。