将alias命名列绑定到ASP.Net中的gridview

时间:2012-09-07 15:45:58

标签: asp.net data-binding gridview .net-3.5 bind

我正在使用.Net 3.5。我有一个网站,我一直在使用gridview控件。基本上,它是一个标准的gridview,但关闭了AutoGenerateColumns,支持通过ItemTemplate创建我们自己的列。以下是我们的一个自定义列的示例:

<asp:TemplateField HeaderText="Physician" ItemStyle-Width="70px" HeaderStyle-Width="70">
    <ItemTemplate>                            
        <asp:Label ID="lblPhysician" runat="server" Text='<%# Bind("LastName") %>' ></asp:Label>                            
    </ItemTemplate> 
</asp:TemplateField>

在后面的代码中,我根据SQL查询填充数据表,并将其设置为gridview数据源,并且通常在回发期间根据上面看到的Bind函数填充标签。但是,我有一个现在使用别名的SQL查询。查询相当大,但这是一个例子:

SELECT LastName, COUNT(Case WHEN <condition> THEN 1 END) AS ABC 
FROM tablename WHERE <condition> Group By LastName

问题是我不能在ABC上使用Bind命令,因为我将它用于LastName。除了LastName之外,gridview中没有显示任何内容,即使为别名列返回了数据。如果我将AutoGenerateColumns设置为true,则gridview将与所有正确的数据绑定,但这不是我们需要页面工作的方式。我错过了什么,不允许我通过它的别名手动将列值绑定到控件?

谢谢,如果需要进一步澄清,请告诉我们!

1 个答案:

答案 0 :(得分:0)

您可以从数据绑定的行中获取它;添加一个事件处理程序,在该处理程序中执行:

.. Grid_RowDataBound(..)
{
   var abc = DataBinder.Eval(e.Item.DataItem, "ABC")
   if (abc == null)
      ((Label)e.Item.FindControl("lblPhysician")).Visible = false;
}

可能有一些语法已经关闭,但要点是你可以从数据项中提取字段,并可编程地执行某些操作。

您也可以使用隐藏字段将其绑定在项目模板中,或者也将其粘贴在DataKeys集合中。