2011-12-22 71 views
0

我有一個動態生成的自定義數據源的網格視圖。GridView Dynamic ItemTemplate EditIndex過濾後

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

如果我編輯過濾器後,該GridView控件它會做的是它會以1作爲編輯索引(假設爲8)...因此,而不是更新索引8上的數據..它將覆蓋索引編號爲1的數據... ...

我希望我的問題已經足夠清楚.. looking fo rward聽到一些答案:) ..

編輯:

這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值)..

+0

顯然e.NewEditIndex只會從起始位置返回。您必須編輯或刪除基於主鍵而不是索引。 – prema 2011-12-22 06:42:02

+0

請詳細說明,因爲我提供的更新.. – rofans91 2011-12-22 06:53:59

回答

0

在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.You可以使用ID now.Not與索引更新。

0

不要更新基於網格索引的數據,只需找到基於該索引的鍵(如主鍵),然後根據該鍵更新數據並再次綁定你的網格。

+0

請詳細說明,因爲我提供了有關問題的更新.. – rofans91 2011-12-22 06:54:15