我正在使用.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将与所有正确的数据绑定,但这不是我们需要页面工作的方式。我错过了什么,不允许我通过它的别名手动将列值绑定到控件?
谢谢,如果需要进一步澄清,请告诉我们!
答案 0 :(得分:0)
您可以从数据绑定的行中获取它;添加一个事件处理程序,在该处理程序中执行:
.. Grid_RowDataBound(..)
{
var abc = DataBinder.Eval(e.Item.DataItem, "ABC")
if (abc == null)
((Label)e.Item.FindControl("lblPhysician")).Visible = false;
}
可能有一些语法已经关闭,但要点是你可以从数据项中提取字段,并可编程地执行某些操作。
您也可以使用隐藏字段将其绑定在项目模板中,或者也将其粘贴在DataKeys集合中。