全部,
仅供参考:我使用的是 VS2005,.net 2.0。
我有一个存在于 FormView EditItemTemplate 中的 GridView 控件。不幸的是,GridView 在该设置中行为不端,当页面回发并且触发 gridview 的选择命令时,其 DataKeys 集合为空。
以下是事件的顺序:
- 用户浏览页面
- 用户单击“编辑”(FormView 呈现 GridView 所在的 EditItemTemplate)
- 用户单击再次回发的搜索并填充位于 EditItemTemplate 中的 GridView(此时 GridView 具有 DataKeys)
- 用户从引发行选择事件的 GridView 中选择项目
- 在回发时,GridView RowCommand 触发,-我检查 CommandName = "select" 并运行我的代码,该代码抛出异常,因为此时 DataKeys 集合为空!
另一个细节:GridView 位于 FormView 的 EditItemTemplate 中的用户控件中。
笔记:
当我将 GridView 移出 FormView 的 EditItemTemplate 时,我能够解决此问题,现在 DataKeys 集合不为空。不幸的是,GridView 必须在 EditItemTemplate 中,以便用户选择他搜索的客户端。
任何见解将不胜感激。
事件处理代码:
protected void ctlSearchResults_RowCommand(object sender, GridViewCommandEventArgs e)
{
// user has selected the client from the keyword search result list
if (e.CommandName == "select")
{
GridView searchResultsGrid = (GridView)e.CommandSource;
int selectedRowIndex = int.Parse((string)e.CommandArgument);
int clientId = (int)searchResultsGrid.DataKeys[selectedRowIndex][Client.PROP_ENTITYID];
// raise Selected event
_OnSelected(new ClientSelectedEventArgs(clientId));
}
}