GridView Dynamic ItemTemplate过滤后的EditIndex

本文关键字:EditIndex 过滤 Dynamic ItemTemplate GridView | 更新日期: 2023-09-27 18:18:46

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

gridview允许"编辑、插入和删除"

一切(所有功能)都很好…

然后我添加了一个过滤功能到gridview..

假设之前我的数据源是基于这个select语句的:

SELECT * FROM <Table>

现在,在过滤器后:

SELECT * FROM <Table> WHERE <Filter Condition>

后过滤。我无法正确编辑(更新)gridview ..在编辑模式下…

   public void gvGridView_RowEditing(object sender, GridViewEditEventArgs e)
    {   
        gvGridView.EditIndex = e.NewEditIndex;
        ((TemplateField)gvGridView.Columns[1]).EditItemTemplate = null;
        //disable editing on primary key
        if (txtSearch.Text != string.Empty || CountRow() > 0)
        {
            FilterQuery(); //refilter the gridview
        }
        else
        {                
            gvGridView.DataBind();
            //if gridview is not meant to be filtered, just leave it as it is
        }
        Session["SelecetdRowIndex"] = e.NewEditIndex;
    }

由于这一行:

gvGridView。

编辑索引= e.NewEditIndex;

未正确初始化editindex。例如:

  1. 过滤前为指数8

  2. 过滤后为索引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)
        }

上面的代码运行良好(将所有值存储到数组中),除了主键。

GridView Dynamic ItemTemplate过滤后的EditIndex

In line update event In cs page:

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>

所以你会得到ID。您现在可以使用Id进行更新。没有索引

不要根据网格索引更新数据,只需根据索引找到键(如主键),然后根据该键更新数据并再次绑定网格