我正在以编程方式编写Gridview。 我在部件(.cs)后面的代码中有数据集,当我试图使用Eval()访问.aspx页面中的数据集时出现“Error Creating Control”错误。
使用Eval()是正确的方法吗?
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblGridTier" runat="server" Text='<%#Eval(dt.Tables[0].Columns["Tier"])%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
答案 0 :(得分:2)
如果你在后面的代码中做了类似的事情来绑定GridView(你实际上应该做这样的事情):
DateSet ds = ...
GridView1.DataSource = ds;
GridView1.DataBind();
然后使用eval的正确方法是给它只显示你想要显示的列的名称。
Text='<%#Eval("Tier")%>'
答案 1 :(得分:0)
好的请注意首先渲染html,然后调用你的代码隐藏文件。现在,当呈现HTML时,数据集为空(尚未创建)数据集为空,因此不会创建控件并抛出异常。您可以在Page_Load上使用此工作,您可以设置label的text属性,或者如果dataset为null则检查此处,然后不使用Eval分配值。希望它会有所帮助。
答案 2 :(得分:0)
Eval函数直接从所选网格绑定的数据源表中计算字段。几个例子如下:
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblSomeField" runat="server" Text='<%# Eval("field1")%>'></asp:Label>
<asp:Image ID="lblImageLink" runat="server" ImageUrl='<%# Eval("imagefield", "http://somelink.com/images/{0}")%>' />
<asp:HyperLink ID="lblMember" runat="server" NavigateUrl='<%# "/member.aspx?id=" + Eval("id") %>' Text='<%# Eval("membername") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>