技不如人

Welcome to Rickel's blog.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何在一个RowFilter过的dataview中增加一行

Posted on 2005-04-28 14:16  Rickel  阅读(1580)  评论(2编辑  收藏  举报
假设你有一个有一组数据的"view" . 其中一个栏位包含一个国家ID (ru "US"): 

DataView myDataView = new DataView(myTable); 
myDataView.RowFilter 
= "country = 'us'"
myGrid.DataSource 
= myDataView; 

如果你用RowFilter过滤这个view使只有 countory为 us的记录显示出来,然后又要增加一个新行,因为这个view已经被Filter过了,所以这个新行将不会显示出来。

DataRowView drv = myDataView.AddNew(); 

为了解决这个问题,可能需要花费大量的时间去debugging,或者就是去修改datagrid什么的。但是实际上真正的问题是由于以下这句代码造成的。
myDataView.RowFilter = "country = 'us'"
由于过滤,dataview将只返回满足条件的所有datarow,其它的datarow将被排除。所以新增一个新行的时候,drRow["country"] 的值为null值(DBNull),而这是要被过滤条件所过滤得数据。

解决方法如下:

1// Change values in the DataRow. 
2drRow = drv.Row[0]; 
3drRow ["country"]='us'
 
4
drRow.EndEdit(); 

Note: 如果filter的表达式有多个栏位,所有的栏位必须进行同样的操作。


DevX:Navin Varma