C# 无法在GridView1\u行编辑中加载viewstate

C# 无法在GridView1\u行编辑中加载viewstate,c#,asp.net,gridview,C#,Asp.net,Gridview,我试图将GridView1_RowEditing设置为gridview的ID,但不设置索引,因为最终用户搜索值并编辑行时会出现问题。我更改了以下代码: protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; BindGridView(); } 为此: protected void GridView1_RowEdit

我试图将GridView1_RowEditing设置为gridview的ID,但不设置索引,因为最终用户搜索值并编辑行时会出现问题。我更改了以下代码:

 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
 GridView1.EditIndex = e.NewEditIndex;
 BindGridView();
}
为此:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
Label ID = (Label)GridView1.Rows[e.NewEditIndex].FindControl("ID");
    BindGridView();
}
ID是数据库中列的名称

但是,当我第二次单击“编辑”按钮时,出现了此错误:

未能加载viewstate。viewstate所在的控件树 正在加载的控件必须与用于保存的控件树匹配 上一个请求期间的viewstate。例如,在添加 控件,回发期间添加的控件必须匹配 初始过程中添加的控件的类型和位置 请求


您可以在BindGridView方法中使用参数。 txtSearch是用于搜索gridview的文本框ID。如果搜索某个值并单击“编辑”,则该值将保留在选定行上

例如:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGridView(this.txtSearch.Text);


    }
}

protected void BindGridView(string column1)
{

    SqlCommand cmd = new SqlCommand("select * from table1 where (column1 like '%" + txtSearch.Text + "%')", con);
    con.Open();
    cmd.Parameters.AddWithValue("@column1 ", column1 );
    GridView1.DataSource = cmd.ExecuteReader();
    GridView1.DataBind();
    con.Close();

}

  protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView1.EditIndex = e.NewEditIndex;
    BindGridView(this.txtSearch.Text);

}

  protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    GridView1.EditIndex = -1;
    BindGridView(this.txtSearch.Text);
}

首先尝试绑定网格视图,然后访问其数据。还有,为什么需要存储该ID。当请求被服务时,“ID”变量将消失。我已经看到了一些讨论,但我没有找到答案。它只是一个简单的Gridview,具有编辑、取消、更新功能和搜索框来搜索Gridview。问题出在gridview的索引中。例如,Gridview中有10行,如果您尝试自己创建此Gridview并在第10行中搜索一个值,它会显示一行,即第10行,如果可以,但如果单击“编辑”,则会显示所有十行,编辑索引将转到第一行。您说“如果您自己尝试创建此grid view”是什么意思?当您单击“编辑”时,会发生回发,网格会重新绑定到其数据源,因为它不知道您的搜索,所以它会显示所有10行。