我有一個動態生成的自定義數據源的網格視圖。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將不會正確初始化。例如:
之前過濾器是指數沒有8
過濾器後,它是指數無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值)..
顯然e.NewEditIndex只會從起始位置返回。您必須編輯或刪除基於主鍵而不是索引。 – prema 2011-12-22 06:42:02
請詳細說明,因爲我提供的更新.. – rofans91 2011-12-22 06:53:59