【发布时间】:2015-05-13 20:20:51
【问题描述】:
我试图在 GridView 上动态显示按钮和复选框,仅当 GridView 中有超过 1 行时。 (视图是基于用户搜索的结果,所以行数是根据搜索结果动态变化的)
按钮和复选框的用途是让我可以组合 2 个或更多用户帐户。如果 GridView 中只有 1 行(令人困惑),则显示此按钮毫无意义,因此我使用函数设置了“可见”参数。但是,在此函数中使用 GridViewID.Rows.Count 不起作用。 (我认为它实际上是调用函数时显示的最大行数)。即:从 Gridview 的第二行调用给我 Row.Count=2。所以我试图通过一个隐藏的控件来代替,但它不起作用。
这是我的代码:
<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:HiddenField ID="HiddenUserID" runat="server" Visible="false" Value= '<%#Eval("UserID") %>' ></asp:HiddenField>
<asp:HiddenField ID="NumberRowsGridView" runat="server" Visible="false" Value='<%#Bind("NumberRowsGridView") %>'></asp:HiddenField>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="UserName" HeaderText="User Name"/>
<asp:BoundField DataField="Email" HeaderText="Email Address"/>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Visible='<%# ShowMergeUserButton((String)Eval("UserName"),(String)Eval("Email"),(String)Eval("NumberRowsGridView")) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="True" HeaderText="Merging Actions">
<ItemTemplate>
<asp:Button ID="Button3" runat="server" CausesValidation="false" CommandName="MergeIntoUser"
Text="Merge Into This Account" CommandArgument='<%# Container.DataItemIndex + "," + Eval("UserID")%>' Visible='<%# ShowMergeUserButton((String)Eval("UserName"),(String)Eval("Email"),(String)Eval("NumberRowsGridView")) %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
函数背后的代码:
protected Boolean ShowMergeUserButton(String Username, String Email, String NumRows)
{
return (Username == Email && Convert.ToInt32(NumRows) > 1);
}
我创建了一个隐藏字段并尝试将其插入到 GridView 中,但我的代码出现运行时错误:(注意,我是 ASP 新手 :)
protected System.Web.UI.WebControls.HiddenField NumberRowsGridView;
-- 在填充 GridView 的函数中 -- dt 是数据源
GridView1.DataSource = dt;
GridView1.DataBind();
NumberRowsGridView.Value = dt.Count<items>().ToString();
我得到的错误是: System.Web.HttpException:DataBinding:“MyASPPageName+dt”不包含名为“NumberRowsGridView”的属性。
所以我基本上做错了。
【问题讨论】: