1

我正在使用.Net 3.5。我有一个网站,我一直在使用 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 将与所有正确的数据绑定,但这不是我们需要页面工作的方式。我错过了什么不允许我通过别名手动将列值绑定到控件?

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

4

1 回答 1

0

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

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

可能有一些语法不可用,但要点是您可以从数据项中提取字段,并以可编程的方式对其进行处理。

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

于 2012-09-07T16:04:09.357 回答