首页 > 解决方案 > 从后面的代码更新 GridView。无法掌握数据

问题描述

我正在从后面的代码中更新 GridView (JobCardStatusGridView),虽然我掌握了行索引,但我无法掌握数据。这是我的代码。

protected void JobCardStatusGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    int jobCardId = int.Parse((JobCardStatusGridView.Rows[e.RowIndex].FindControl("JobCardID") as TextBox).Text);
    string completedDate = (JobCardStatusGridView.Rows[e.RowIndex].FindControl("CompletedData") as TextBox).Text;

    CrewController crewManager = new CrewController();
    crewManager.UpdateJobCard(jobCardId, completedDate);

    JobCardStatusGridView.EditIndex = -1;
    PopulateRouteStatus();
}

这是我的 Page_Load

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
      {
          PopulateRouteStatus();
      }
} 

我从变量 jobCardId 收到的错误是 Input string is not in a correct format。当我评论该行时,我从变量 completedDate 收到的错误是Object reference not set to an instance of an object这导致我得出结论,我的代码没有获取数据。最奇怪的是,如果行索引。有人可以帮我看看我做错了什么吗?我现在注意到一些让我更困惑的事情。如果每次加载页面时都填充 GridView,我会检索 jobCardId 变量。但是当我在回发时阻止填充 GridView 时,为了能够检索数据,我得到了上面提到的错误。我真的不明白。有人弄清楚出了什么问题吗?谢谢

标签: c#asp.net

解决方案


因为jobCardId该错误意味着您尝试从中解析整数的字符串实际上并不包含有效的整数。

因为completedDate你写.FindControl("CompletedData")的不是.FindControl("CompletedDate")- 它应该是'e'而不是'a'。

您可以尝试更优雅的方式从下面的代码中从 Gridview 中查找 ID 和 Textbox 值。

试试这个:

protected void JobCardStatusGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

     GridViewRow row = (GridViewRow)JobCardStatusGridView.Rows[e.RowIndex];
     int jobCardId = Int32.Parse(JobCardStatusGridView.DataKeys[e.RowIndex].Value.ToString());

     TextBox completedDate = (TextBox)row.FindControl("CompletedData");

   CrewController crewManager = new CrewController();
   crewManager.UpdateJobCard(jobCardId, completedDate);

   JobCardStatusGridView.EditIndex = -1;
   PopulateRouteStatus();
}

推荐阅读