假设你有一个有一组数据的"view" . 其中一个栏位包含一个国家ID (ru "US"):
DevX:Navin Varma
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'
4drRow.EndEdit();
2drRow = drv.Row[0];
3drRow ["country"]='us'
4drRow.EndEdit();
Note: 如果filter的表达式有多个栏位,所有的栏位必须进行同样的操作。
DevX:Navin Varma