我有一个通过数据库填充的GridView,在我的GridView标签中:
<Columns>
<asp:TemplateField>
<ItemTemplate><asp:Panel ID="bar" runat="server" /></ItemTemplate>
</TemplateField>
</Columns>
现在,我希望能够(在代码中)将width属性应用于生成的每一行的“bar”面板。我该如何定位这些行? width属性对于每一行都是唯一的,具体取决于该行的数据库中的值。
答案 0 :(得分:3)
<asp:Panel ID="bar" runat="server" Width='<%# Eval("Width") %>' />
如果您愿意,可以将Eval("Width")
更改为计算宽度的表达式。
答案 1 :(得分:0)
您将要处理GridView的RowCreated
事件。这是在GridView创建每一行之后发生的,它将为您提供对该行及其中包含的所有控件的编程访问。
答案 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事件。每个行绑定都将触发一个您可以在回调处理程序中处理的事件。
在该回调处理程序中,您可以获取有关绑定到该行的项的信息,并根据数据库中的值应用宽度。