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。例如:
过滤前为指数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)
}
上面的代码运行良好(将所有值存储到数组中),除了主键。
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进行更新。没有索引
不要根据网格索引更新数据,只需根据索引找到键(如主键),然后根据该键更新数据并再次绑定网格