所有
仅供参考:我使用的是VS2005,.net 2.0。
我有一个FormView EditItemTemplate中存在的GridView控件。不幸的是,GridView在该设置中行为不当,当页面回发并且gridview的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));
}
}
答案 0 :(得分:0)
我相信您希望将发件人转换为GridView,如下所示:
GridView searchResultsGrid = sender as GridView;
答案 1 :(得分:0)
DataKey集合为空的原因是您在搜索结果gridview的数据绑定之前访问该集合。我发现this指南在调试处理问题的顺序时很有用。
答案 2 :(得分:-1)
试试这个:
int selectedRowIndex = Convert.ToInt32(e.CommandArgument);
int clientId = Convert.ToInt32(this.yourGridView.DataKeys[selectedRowIndex]["yourDataKey"].Value);