【问题标题】:GridView RowUpdating not working in second pageGridView RowUpdating 在第二页不起作用
【发布时间】:2017-06-12 21:33:09
【问题描述】:

我在OnUpdating 命令期间使用以下代码更新网格视图中的值,

protected void grid_view_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = (GridViewRow)grid_view.Rows[e.RowIndex];
    int number = Convert.ToInt32(((TextBox)row.Cells[3].FindControl("flatnumber")).Text);
    string type = ((DropDownList)row.Cells[4].FindControl("flattype")).Text;
    int max = Convert.ToInt32(((DropDownList)row.Cells[5].FindControl("flatvacancy")).Text);
    string flatID = ((Label)row.Cells[0].FindControl("flatid")).Text;
    DataTable dt = (DataTable)ViewState["Table"];
    DataRow[] datarow = dt.Select("ID='" + flatID + "'");
    dt.Rows[e.RowIndex].BeginEdit();
    dt.Rows[e.RowIndex]["Number"] = number;
    dt.Rows[e.RowIndex]["Type"] = type;
    dt.Rows[e.RowIndex]["Vacancy"] = max;
    dt.Rows[e.RowIndex].EndEdit();
    dt.AcceptChanges();
    ViewState["Table"] = dt;
    grid_view.EditIndex = -1;
    grid_view.DataSource = dt;
    grid_view.DataBind();
}

此代码在网格视图的第一页中运行良好,但是当我尝试编辑第二页时它不起作用。当我点击编辑按钮时,相应的行编辑模板正在加载。当我单击保存而不是保存到第二页时,第一页行被修改。例如,如果我在第 2 页的第 2 行单击编辑,在单击更新后,第 1 页的第 3 行被修改为新值,而不是第 2 页的第 2 行。

我的 RowEditing 和 CancelEditing 代码如下,

protected void grid_view_RowEditing(object sender, GridViewEditEventArgs e)
{
    grid_view.EditIndex = e.NewEditIndex;
    DataTable dt = (DataTable)ViewState["Table"];
    grid_view.DataSource = dt;
    grid_view.DataBind();
}

protected void grid_view_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    grid_view.EditIndex = -1;
    DataTable dt = (DataTable)ViewState["Table"];
    grid_view.DataSource = dt;
    grid_view.DataBind();
}

【问题讨论】:

    标签: javascript c# html asp.net gridview


    【解决方案1】:

    您可以仅使用 e.RowIndex 访问更新的值,但要在 Datatable 中进行更改,您必须将 grid_view.PageIndexgrid_view.PageSize 的乘积添加到 e.RowIndex 以在实际行中进行更改。

    protected void grid_view_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = (GridViewRow)grid_view.Rows[e.RowIndex];
        int number = Convert.ToInt32(((TextBox)row.Cells[3].FindControl("flatnumber")).Text);
        string type = ((DropDownList)row.Cells[4].FindControl("flattype")).Text;
        int max = Convert.ToInt32(((DropDownList)row.Cells[5].FindControl("flatvacancy")).Text);
        string flatID = ((Label)row.Cells[0].FindControl("flatid")).Text;
        DataTable dt = (DataTable)ViewState["Table"];
        int row1=e.RowIndex+(grid_view.PageIndex*grid_view.PageSize)
        dt.Rows[row1].BeginEdit();
        dt.Rows[row1]["Number"] = number;
        dt.Rows[row1]["Type"] = type;
        dt.Rows[row1]["Vacancy"] = max;
        dt.Rows[row1].EndEdit();
        dt.AcceptChanges();
        ViewState["Table"] = dt;
        grid_view.EditIndex = -1;
        grid_view.DataSource = dt;
        grid_view.DataBind();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      相关资源
      最近更新 更多