这是一个假设性的问题,它让我离开了花园小径...说我有一个我想编辑的网格视图...给定一个绑定数据的方法..
private void BindGridFirst() {
var data = new List<string>() {
"A","B","C","D","E","F"
};
gridView.DataSource = data;
gridView.DataBind();
}
现在假设我正在查看此页面,另一位用户已经出现并对基础数据进行了一些更改,现在我点击编辑按钮编辑 D ..
编辑方法很简单:
protected void RowEdit(object sender, GridViewEditEventArgs e) {
gridView.EditIndex = e.NewEditIndex;
BindGridSecond();
}
编辑:我不得不指出,这种方法几乎用于所有在线示例,包括来自Microsoft的示例。
这个BindGridSecond()方法如下所示:
private void BindGridSecond() {
var data = new List<string>() {
"A", "AA", "B","C","D","E","F"
};
gridView.DataSource = data;
gridView.DataBind();
}
它完全相同,但现在数据已更改。 UI更新后,用户现在处于针对行 C 的编辑模式。
不是用户期望或想要的。如何处理这种情况以避免这样的问题?
答案 0 :(得分:1)
就个人而言,我在GridView上使用DataKeyNames属性和SelectedDataKey,这样我就可以轻松获取用户想要的行的主键,而不是依赖于网格的索引。
通过使用主键,您在添加到集合中的新项目没有任何问题,例如在您的示例中。此外,使用主键可以更轻松地处理网格上的分页,因为您不必考虑页码和索引。
答案 1 :(得分:0)
Imho有两种选择:
例如,您可以在会话中缓存要绑定到网格的数据。因此,您可以在调用BindGridSecond-Method之前检查更改,并在用户浏览页面时进行任何更改时提醒用户。
在选项2中,您将再次缓存您在BindGridFirst-Method中绑定的数据,并仅使用此数据进行下一个PostBack操作。因此,您不必担心浏览网格时可能发生的更改。