对于Datagridview控件,数据源类型可以是dataset或者是IList类型等。以前datagridview绑定的数据源都是习惯用dataset的,但NHiberate查询返回结果都是以IList形式的。可以将IList转换为dataset再绑定到datagridview,也不是很难的事,网上也有现成的代码,但这样效率是不是会很低呢?我是怀疑的,要是几十条几百条数据还好,如果有成千上万条数据那样做的话我想肯定会很慢的。对于单表查询的结果datagridview绑定IList很容易,但对于多表查询有依赖关系(表中有外键)的IList就不那么好处理了。如下代码示例
class BaseWell
{
public string WellNo { get; set; }
public string CasNo { get; set; }
public Tub MyTub { get; set; }
}
class Tub
{
public string TubNo { get; set; }
public string TubName { get; set; }
}
现有datagridview 控件dataGridview1,在NHiberate返回的结果是IList<BaseWell>类型的wells,若直接将其赋值dataGridView1.DataSource=wells,将无法显示MyTub的数据。
一种比较简单解决的方式是linq 查询IList得到一个新的IList,代码如下
IList<BaseWell> wells = new List<BaseWell>();
Tub t0 = new Tub { TubNo = "t000", TubName = "管0" };
Tub t1 = new Tub { TubNo = "t001", TubName = "管1" };
BaseWell well0 = new BaseWell { WellNo = "a000", CasNo = "c000",MyTub=t0 };
BaseWell well1 = new BaseWell { WellNo = "a001", CasNo = "c001" ,MyTub=t1};wells.Add(well0);
wells.Add(well1);
var query = from w in wells select new { wellno = w.WellNo, tubno = w.MyTub.TubNo, tubname = w.MyTub.TubName, casno = w.CasNo };
dataGridView1.DataSource = query.ToList();
不知道这种方式效率会不会也很差,但这是我找到的相对较好的解决方式吧