使用GridView和ItemTemplates(ASP.net/C#)

时间:2009-01-09 20:26:19

标签: c# asp.net gridview

我有一个通过数据库填充的GridView,在我的GridView标签中:

<Columns>
  <asp:TemplateField>
    <ItemTemplate><asp:Panel ID="bar" runat="server" /></ItemTemplate>
  </TemplateField>
</Columns>

现在,我希望能够(在代码中)将width属性应用于生成的每一行的“bar”面板。我该如何定位这些行? width属性对于每一行都是唯一的,具体取决于该行的数据库中的值。

4 个答案:

答案 0 :(得分:3)

<asp:Panel ID="bar" runat="server" Width='<%# Eval("Width") %>' />

如果您愿意,可以将Eval("Width")更改为计算宽度的表达式。

答案 1 :(得分:0)

您将要处理GridView的RowCreated事件。这是在GridView创建每一行之后发生的,它将为您提供对该行及其中包含的所有控件的编程访问。

Here is the MSDN page on the event.

答案 2 :(得分:0)

我建议你不要使用Eval,如果可以的话,因为它有点慢。在这种情况下,我通常更喜欢将我的数据源转换为他的基本类型:

<Columns>
  <asp:TemplateField>
    <ItemTemplate>
    <asp:Panel ID="bar" runat="server" Width='<%# ((yourCustomData)Container.DataItem).Width %>' />
    </ItemTemplate>
  </TemplateField>
</Columns>

其中yourCustomData是数据源的行类型(即List<>的元素)。

这种方法真的比Eval快。

编辑:哦,不要忘记在页面中包含对包含yourCustomData的命名空间的引用

<%@ Import Namespace="yourNameSpace.Data" %>

答案 3 :(得分:0)

我建议你将一个回调处理程序附加到OnRowDataBound事件。每个行绑定都将触发一个您可以在回调处理程序中处理的事件。

在该回调处理程序中,您可以获取有关绑定到该行的项的信息,并根据数据库中的值应用宽度。