博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NHiberate多表查询结果绑定到Datagridview控件
阅读量:6415 次
发布时间:2019-06-23

本文共 1247 字,大约阅读时间需要 4 分钟。

hot3.png

    对于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();

不知道这种方式效率会不会也很差,但这是我找到的相对较好的解决方式吧

转载于:https://my.oschina.net/u/577601/blog/82195

你可能感兴趣的文章
主流浏览器
查看>>
String类replaceAll方法正则替换深入分析
查看>>
快速排序
查看>>
极限编程和JUnit
查看>>
linux上部署ant
查看>>
arc073 F many moves(dp + 线段树)
查看>>
长理 校赛的 一个贪心题
查看>>
vuecli3初尝试(转载)
查看>>
学习笔记:索引碎片、计划缓存、统计信息
查看>>
TSQL技巧(一) -- 子查询(subquery)
查看>>
espcms简约版的表单,提示页,搜索列表页
查看>>
GDI
查看>>
设备拨打电话
查看>>
学习笔记-七burpsuite的使用
查看>>
dom解析xml
查看>>
【leetcode】900. RLE Iterator
查看>>
Google JavaScript Style Guide
查看>>
ethtool
查看>>
POJ 1273 Drainage Ditches
查看>>
阻塞和非阻塞,同步和异步
查看>>