GridControl绑定List对象一般是为了获取焦点行时直接获得该行代表的List对象,或者为了实现嵌套表格,对第一中情况,起始不用绑定List,绑定DataTable也可以实现获取对应List对象
如果直接绑定List<T>对象,列标题就是T的各属性名,一旦转义(如Select(c => new { 查询条件 = c.queryString, 数量 = c.resAirlines.Count }).ToList();),就成了自定义对象,GetFocusedRow无法获取到原T对象
解决方法:(起始也适用于绑定的DataTable)
进行转义时,将原对象作为object也进行完整转义,如 var res = FlightBLL.queryPool.Select(c => new { obj=c, 查询条件 = c.queryString, 数量 = c.resAirlines.Count }).ToList(); 这里的obj=c就将完整对象转义成了obj
这样,即保留了原对象,也可灵活组织显示形式和列标题
绑定时,即可用List绑定,也可用DataTable绑定,如下面两种绑定方法都ok:
CmmFrm.BestFitGridViewColumnsWidth(gdcQuery, res, 0, true, false);
CmmFrm.BestFitGridViewColumnsWidth(gdcQuery, res.ToDataTable(), 0, true, false);
将obj列隐藏,gdvQuery.Columns[0].Visible = false;
取出选定行对象时,不能用GetFocusedRow了,而要用GetFocusedRowCellValue,如:
var row = gdvQuery.GetFocusedRowCellValue(gdvQuery.Columns[0]) as QUERY_CONDITION_CONTRAST;
取消当前选中行,但是无法取消初始绑定时的选择行
gdv_refer.FocusedRowHandle = -1;
//判断当前有无数据选中,若index<0,没有数据选中
int index= gdv_refer.GetFocusedDataSourceRowIndex() ;
//返回选中行的数据对象
DataRow dr= gdv_refer.GetFocusedDataRow();
//返回选中行数据实体
REFTAB reftab = gdv_refer.GetFocusedRow() as REFTAB;
//删除一行数据
gdv_refer.DeleteRow(gdv_refer.FocusedRowHandle);
//新增一行
DataRow dr = this.DataDetailSourceTable.Rows.Add(); //这是新增加了一行
dr["primary_key"] = "";