v15.1.8 gridview VisibleRowCount&Selection.IsRowSelected的问题
发表于2019-05-10
回复:0
查看:3057 |
项目之前devexpress版本为13.1.12,现在升级到15.1.8出现一个奇怪的问题,
不知大家是否有遇到过?
一个gridview多页,已设定KeyFieldName,每页<SettingsPager PageSize="30"/>,数据第一列为ASPxCheckBox元件,以便user选择。
后台在判定user选择了哪些行数据时,之前用如下code没问题,
但是只能在当前页进行选择数据,而别的页必须重新选择处理。
<pre class='brush: csharp'>//**ItemList.VisibleRowCount获取当前页的记录数**
for (int i = 0; i < ItemList.VisibleRowCount; i++)
{
if (ItemList.Selection.IsRowSelected(i))
result.Message = i+"选择";
}</pre>
现在15.1.8我debug看到ItemList.VisibleRowCount能获取到**所有数据的记录数**,
但是上面的code就会出现问题,
**1.如果我选择第一页的某条记录,会在 (ItemList.Selection.IsRowSelected(i))处循环到i=30时error
2.如果我选择第二页的某条记录,则i=0时就error
**
error信息如下:
'ItemList.Selection.IsRowSelected(30)' 擲回型別 'System.Data.MissingPrimaryKeyException' 的例外狀況
base {System.Data.DataException}: {"A primary key field specified via the KeyFieldName property is not found in the underlying data source. Make sure the field name is spelled correctly. Pay attention to the character case. For detailed information, please refer to the http://www.devexpress.com/kbid=KA18689 article."}
看提示是说没设定KeyFieldName,但是我100%有设定了,且字符都正确。
不知道是否是官方的bug?
另外我有试着改写成如下code,还是会有别的error:
<pre class='brush: csharp'>for (int i = 0; i < ItemList.VisibleRowCount; i++)//**ItemList.VisibleRowCount获取所有页的总记录数**
{
object key = ItemList.GetRowValues(i, ItemList.KeyFieldName);
if (ItemList.Selection.IsRowSelectedByKey(key))
result.Message = i+"选择";
}</pre>
问题为:
我选择第一页的某条数据时,正常处理,没有问题
我选择第二页的某条数据时,处理失败,i=0时ItemList.VisibleRowCount能正常获取到总记录数,i++后,奇怪的事发生了,ItemList.VisibleRowCount变为0了..导致不循环了..
如果我用变量记录下ItemList.VisibleRowCount也不行,因为如果我选择了第一页某条数据时,那条对应的key值ItemList.GetRowValues(i, ItemList.KeyFieldName)取不到
看起来只能用PageIndex和pagesize自己判定来处理??
或者还是个别现象而已?
登录 慧都网发表评论