筛选后的GridView Dynamic ItemTemplate EditIndex

时间:2011-12-22 06:30:23

标签: c# asp.net gridview filter indexing

我有一个动态生成的带有自定义数据源的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.EditIndex = e.NewEditIndex;

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

  1. 在过滤之前它是索引号8

  2. 过滤后,它是索引号1

  3. 如果我在过滤器之后编辑这个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值)..

2 个答案:

答案 0 :(得分:-1)

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

答案 1 :(得分:-1)

在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进行更新。不使用索引。