HQL查询返回的结果绑定到DataGrid的问题

采用了HQL语言的查询方式,如下是一个简单的查询代码:

IList list = session.CreateQuery("from SysJobs").List();

此代码表示的是从SysJobs对象中查询所有的值。

我采用绑定列,设定其字段为相应的SysJobs的属性,把返回结果绑定到DataGrid中,结果显示正常:

<asp:BoundColumn DataField="Name" HeaderText="Job Name"></asp:BoundColumn>

 

但是如果我采用下面的HQL语句就出问题了:

IList list = session.CreateQuery("select a.JobId, a.Name, a.Description from SysJobs a").List();

在绑定到DataGrid的时候报的错是:选定数据源上未能找到名称为“Name”的字段或属性。

我比较了一下两个绑定到DataGridIListArrayList对象),发现第一种情况没有使用select的时候每一笔记录存储一个SysJobs对象,因此在绑定的时候抓取此对象的属性是可以找到的,而第二种情况使用了select则每一笔记录存储的是数组对象,所以在绑定到DataGrid时找不到相应的字段或属性。

上面这种情况当然可以只采用第一种形式,不需要用select,但是当我需要从多个对象中抓取数据时就要用到select了,此时就需要解决这个问题了。尝试了两种方法,第一种方法刚开始没解决,后来在别人的帮助下解决了。第二种比较笨的方法虽然解决了,但是一旦改了索引就要对相应的绑定做更改,不易于更新。

1、 HQL中可以将查询出来的属性组建成一个新的类

用这几个属性组建成一个新的类:

Select new Jobs(a.JobId, a.Name, a.Description) from SysJobs a

结果依然报错:class not found: Jobs [Select new Jobs(a.JobId, a.Name, a.Description) from BenQ.JobMonitor.SYSEntity.SysJobs a]

查资料发现新的类必须是持久的,必须实现Jobs及其hbm.xml文件映射。

但是可以作如下更改:

Select new SysJobs(a.JobId, a.Name, a.Description) from SysJobs a

并在SysJobs类中添加new SysJobsa.JobId, a.Name, a.Description)这个构造方法。

2、  DataGrid的绑定

把原来的绑定列改为模板列,并且把每个绑定字段都换成对应的数组下标

<asp:BoundColumn DataField="Name" HeaderText="Job Name"></asp:BoundColumn>

 

<asp:TemplateColumn HeaderText="Job Name">

       <ItemTemplate>

              <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Name") %>'>

              </asp:Label>

       </ItemTemplate>

</asp:TemplateColumn>

 

<asp:TemplateColumn HeaderText="Job Name">

       <ItemTemplate>

              <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem[1]") %>'>

              </asp:Label>

       </ItemTemplate>

</asp:TemplateColumn>

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值