C# 过滤后的GridView动态项模板EditIndex

C# 过滤后的GridView动态项模板EditIndex,c#,asp.net,gridview,filter,indexing,C#,Asp.net,Gridview,Filter,Indexing,我有一个带有自定义数据源的动态生成的gridview gridview允许编辑、插入和删除 所有功能都工作正常 然后我在gridview中添加了一个过滤功能 假设前面我的数据源基于以下select语句: SELECT * FROM <Table> 由于这一行: gvGridView.EditIndex=e.NewEditIndex editindex将无法正确初始化。例如: 在筛选之前,它是索引8 经过筛选后,它是索引1 如果我在过滤后编辑这个gridview,它将以1作为编辑索引

我有一个带有自定义数据源的动态生成的gridview

gridview允许编辑、插入和删除

所有功能都工作正常

然后我在gridview中添加了一个过滤功能

假设前面我的数据源基于以下select语句:

SELECT * FROM <Table>
由于这一行:

gvGridView.EditIndex=e.NewEditIndex

editindex将无法正确初始化。例如:

在筛选之前,它是索引8

经过筛选后,它是索引1

如果我在过滤后编辑这个gridview,它将以1作为编辑索引,假定为8。。。因此,不是更新索引8上的数据。。它将用索引号1覆盖数据

我希望我的问题足够清楚。。期待听到一些答案:

编辑:

这是gridview更新期间发生的情况:

GridViewRow row = gvGridView.Rows[e.RowIndex];
//decide which row being edited..

for (int i = 0; i < Table.Columns.Count; i++)
        {
            string field_value = ((TextBox)row.FindControl(Table.Columns[i].ColumnName)).Text;
            ParameterArray.Add(field_value);
            //storing all value in that row into an array (including PK)
        }

上面的代码可以很好地将除主键之外的所有值存储到数组中。。始终存储e.rowindex值。

不要根据网格索引更新数据,只需根据该索引找到类似键的主键,然后根据该键更新数据并再次绑定网格。

在cs页面的行更新事件中:

protected void Grid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   TextBox txtId = (TextBox)Grid.Rows[e.RowIndex].FindControl("txtId_insql");
   //Get the Id for which row is clicked
}
在aspx页面中:

<Gridview>
<column>
 <asp:BoundColumn DataField="txtId_insql" HeaderText="PrimaryID" Visible="False"></asp:BoundColumn> 
</columns>
</GridView>

因此,您将获得ID。您现在可以使用ID进行更新。而不是使用索引。

显然,e.NewEditIndex将仅从开始返回。您必须根据主键而不是索引进行编辑或删除。请详细说明,因为我提供了更新。。
protected void Grid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   TextBox txtId = (TextBox)Grid.Rows[e.RowIndex].FindControl("txtId_insql");
   //Get the Id for which row is clicked
}
<Gridview>
<column>
 <asp:BoundColumn DataField="txtId_insql" HeaderText="PrimaryID" Visible="False"></asp:BoundColumn> 
</columns>
</GridView>