当前位置: 代码迷 >> C# >> 对Datable.DefaultView应用了RowFilter之后,更新行出现错误
  详细解决方案

对Datable.DefaultView应用了RowFilter之后,更新行出现错误

热度:179   发布时间:2016-04-28 08:37:15.0
对Datable.DefaultView应用了RowFilter之后,更新行出现异常
一个内存datatable,一个datagridview 
datagridview 的dataSource为内存table的defaultview

出问题的代码片段:
#region 更新用户试卷ID
                        string sFilter = string.Format("UID={0}", cr.UID);
                        DataRow[] drs = userStatusTable.Select(sFilter);

                        if (drs.Length == 1)
                        {
                            if (locker_userTable.TryEnterWriteLock(1000))
                            {
                                try
                                {                                    
                                    //string sDVFilter = userStatusTable.DefaultView.RowFilter;---这里
                                    drs[0]["试卷ID"] = nTpid;
                                    drs[0]["IP"] = getRemoteIPPort(session);
                                }
                                catch (InvalidOperationException e)
                                {
                                    Console.WriteLine(e.Message);
                                }
                                finally
                                {
                                    locker_userTable.ExitWriteLock();
                                }
                            }
                        }
                        #endregion
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
userStatusTable.DefaultView.RowFilter如果设置过rowfilter,
这两行:
drs[0]["试卷ID"] = nTpid;
drs[0]["IP"] = getRemoteIPPort(session);
就会出现异常:
systemOperationException
或OutOfRangeException

但是,数据依然可以更改
只是datagridview不会自动刷新(手动刷新可以)

求解
------解决思路----------------------
这异常OutOfRangeException  应该是你设置了rowFilter之后,集合里面没有符合条件的记录了吧,所以报错,其他暂时看不出来
------解决思路----------------------
加个 断点 F5  调试看看 drs 到底有数据没