C# ASP.NET GridView不更新其行

C# ASP.NET GridView不更新其行,c#,asp.net,.net,gridview,C#,Asp.net,.net,Gridview,我在ASP.NET GridView更新行中遵循了这一点,但它不起作用 updatedItem.DepartureCity = ((TextBox)(row.Cells[2].Controls[0])).Text; 仍然提供单元格中的原始值,而不是更新后的值 public partial class ManagePage : System.Web.UI.Page { BusScheduleModelContainer modelContainer = new BusScheduleMo

我在ASP.NET GridView更新行中遵循了这一点,但它不起作用

updatedItem.DepartureCity = ((TextBox)(row.Cells[2].Controls[0])).Text;
仍然提供单元格中的原始值,而不是更新后的值

public partial class ManagePage : System.Web.UI.Page
{
    BusScheduleModelContainer modelContainer = new BusScheduleModelContainer();
    protected void Page_Load(object sender, EventArgs e)
    {
        //FormsAuthentication.RedirectFromLoginPage()
        //if (!HttpContext.Current.User.Identity.IsAuthenticated)
        //{
        //    Server.Transfer("LoginPage.aspx");
        //}

        resultsGridView.DataSource = modelContainer.BusRoutes.ToList();
        resultsGridView.DataBind();
    }

    protected void RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        var routeID = int.Parse(e.Values[0].ToString());
        var removedItem = modelContainer.BusRoutes.FirstOrDefault(
            item => item.RouteID == routeID);

        if (removedItem != null)
        {
            modelContainer.BusRoutes.Remove(removedItem);
            resultsGridView.DataSource = modelContainer.BusRoutes.ToList();
            resultsGridView.DataBind();
            modelContainer.SaveChanges();
        }
    }

    protected void RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        var routeID = int.Parse(e.NewValues[0].ToString());
        var updatedItem = modelContainer.BusRoutes.FirstOrDefault(
            item => item.RouteID == routeID);

        if (updatedItem != null)
        {
            GridViewRow row = resultsGridView.Rows[e.RowIndex];
            var res = row.FindControl("ctl00$ContentPlaceHolder1$resultsGridView$ctl02$ctl03");
            updatedItem.DepartureCity = ((TextBox)(row.Cells[2].Controls[0])).Text;
            updatedItem.ArrivalCity = ((TextBox)(row.Cells[3].Controls[0])).Text;
            updatedItem.DepartureTime = DateTime.Parse(((TextBox)(row.Cells[4].Controls[0])).Text);
            updatedItem.ArrivalTime = DateTime.Parse(((TextBox)(row.Cells[5].Controls[0])).Text);
        }

        resultsGridView.EditIndex = -1;

        BindData();
    }

    protected void RowEditing(object sender, GridViewEditEventArgs e)
    {
        //Set the edit index.
        resultsGridView.EditIndex = e.NewEditIndex;
        //Bind data to the GridView control.
        BindData();
    }

    protected void RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        //Reset the edit index.
        resultsGridView.EditIndex = -1;
        //Bind data to the GridView control.
        BindData();
    }

    private void BindData()
    {
        resultsGridView.DataSource = modelContainer.BusRoutes.ToList();
        resultsGridView.DataBind();
    }
}

<div>
                <asp:GridView runat="server" ID="resultsGridView" 
                              AutoGenerateColumns="true" AllowPaging="true"
                              AutoGenerateDeleteButton="true" OnRowDeleting="RowDeleting"
                              AutoGenerateEditButton="true" OnRowUpdating="RowUpdating"
                              OnRowEditing="RowEditing" OnRowCancelingEdit="RowCancelingEdit">
                </asp:GridView>
            </div>
public部分类ManagePage:System.Web.UI.Page
{
BusScheduleModelContainer modelContainer=新的BusScheduleModelContainer();
受保护的无效页面加载(对象发送方、事件参数e)
{
//FormsAuthentication.RedirectFromLoginPage()格式
//如果(!HttpContext.Current.User.Identity.IsAuthenticated)
//{
//Server.Transfer(“LoginPage.aspx”);
//}
resultsGridView.DataSource=modelContainer.BusRoutes.ToList();
resultsGridView.DataBind();
}
受保护的无效行删除(对象发送方,GridViewDeleteEventArgs e)
{
var routeID=int.Parse(例如,Values[0].ToString());
var removedItem=modelContainer.BusRoutes.FirstOrDefault(
item=>item.RouteID==RouteID);
如果(removedItem!=null)
{
modelContainer.BusRoutes.Remove(removedItem);
resultsGridView.DataSource=modelContainer.BusRoutes.ToList();
resultsGridView.DataBind();
modelContainer.SaveChanges();
}
}
受保护的无效行更新(对象发送方,GridViewUpdateEventArgs e)
{
var routeID=int.Parse(例如,NewValues[0].ToString());
var updateItem=modelContainer.BusRoutes.FirstOrDefault(
item=>item.RouteID==RouteID);
如果(updateItem!=null)
{
GridViewRow row=resultsGridView.Rows[e.RowIndex];
var res=row.FindControl(“ctl00$ContentPlaceholder 1$resultsGridView$ctl02$ctl03”);
updateItem.DepartureCity=((文本框)(行。单元格[2]。控件[0])).Text;
updateItem.ArrivalCity=((文本框)(行单元格[3]。控件[0])。文本;
updateItem.DepartureTime=DateTime.Parse(((文本框)(行。单元格[4]。控件[0])).Text);
updateItem.ArrivalTime=DateTime.Parse(((文本框)(行。单元格[5]。控件[0])).Text);
}
resultsGridView.EditIndex=-1;
BindData();
}
受保护的空行编辑(对象发送方,GridViewEditEventArgs e)
{
//设置编辑索引。
resultsGridView.EditIndex=e.NewEditIndex;
//将数据绑定到GridView控件。
BindData();
}
受保护的无效行取消编辑(对象发送方,GridViewCancelEditEventArgs e)
{
//重置编辑索引。
resultsGridView.EditIndex=-1;
//将数据绑定到GridView控件。
BindData();
}
私有void BindData()
{
resultsGridView.DataSource=modelContainer.BusRoutes.ToList();
resultsGridView.DataBind();
}
}

在行更新方法中,您需要添加
modelContainer.SaveChanges()如下所示:

if (updatedItem != null)
{
    GridViewRow row = resultsGridView.Rows[e.RowIndex];
    var res = row.FindControl("ctl00$ContentPlaceHolder1$resultsGridView$ctl02$ctl03");
    updatedItem.DepartureCity = ((TextBox)(row.Cells[2].Controls[0])).Text;
    updatedItem.ArrivalCity = ((TextBox)(row.Cells[3].Controls[0])).Text;
    updatedItem.DepartureTime = DateTime.Parse(((TextBox)(row.Cells[4].Controls[0])).Text);
    updatedItem.ArrivalTime = DateTime.Parse(((TextBox)(row.Cells[5].Controls[0])).Text);
    modelContainer.SaveChanges();
}

您是否使用CommandField作为更新控制程序? 如果是这样,当您单击更新按钮时,首先它将执行
Page\u Load
事件处理程序,然后在
rowUpdate
事件处理程序中执行

您应该尝试在页面加载中检查post back事件处理程序,如下所示:

protected void Page_Load(object sender, EventArgs e)
{  
   if(!IsPostBack)
   {
      resultsGridView.DataSource = modelContainer.BusRoutes.ToList();
      resultsGridView.DataBind();
   }
}
这样,它将仅在您第一次打开此页面时将数据绑定到GridView


对于回发事件,如单击“更新”按钮,它将不会再次将原始数据绑定到GridView。

感谢您的写作。问题是,当我访问((TextBox)(row.Cells[2].Controls[0]).Text时,我仍然会得到旧值,而不是输入值。非常感谢,这是我问题的解决方案。