有条件隐藏GridView模板列

问题描述 投票:0回答:2

我试图有条件地隐藏 Gridview 中的模板列,我尝试了以下方法,但这不起作用。有没有办法在 .aspx 中做到这一点?

 <asp:TemplateField HeaderText="Grade" SortExpression="grade" Visible='<%# Convert.ToDouble(Eval("grade")) == 0 ? true : false %>'>
           <ItemTemplate>
                <%# string.Format("{0:0.#}", Convert.ToDouble(Eval("grade"))) %>
           </ItemTemplate>
 </asp:TemplateField>
c# asp.net aspxgridview templatefield
2个回答
1
投票

您可以使用 itemDataBound 事件执行所有条件格式设置(颜色、隐藏等)。但是,您的示例标记似乎没有控件 - 并且您希望拥有该信息的控件。该控件应该有某种“id”或名称,您可以在代码中引用。

但是,由于您没有提供太多标记?然后我给出了单元格集合和您可能拥有的控件的示例。

所以,假设我们有这个简单的网格视图。请注意最后两个字段都是 City,一个是绑定字段(通常很常见),另一个是标签(但可以是文本框或任何 ASP.NET 控件)。

      <asp:GridView ID="GridView1" runat="server" CssClass="table-hover" AutoGenerateColumns="False" DataKeyNames="ID">
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="HotelName" HeaderText="HotelName" SortExpression="HotelName" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />

                <asp:TemplateField HeaderText ="City2">
                    <ItemTemplate>
                        <asp:Label ID="lblCity" runat="server" Text = '<%# Eval("City") %>'  >'<"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

好的,在页面加载时,我们使用以下代码加载上面的网格:

protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack == false)
        LoadGrid();
}

public void LoadGrid()
{
    using (SqlCommand cmdSQL = new SqlCommand("SELECT ID, FirstName, LastName, HotelName, City from tblHotels", new SqlConnection(My.Settings.TEST3)))
    {
        cmdSQL.Connection.Open();
        GridView1.DataSource = cmdSQL.ExecuteReader;
        GridView1.DataBind();
    }
}

好的,我们得到这个输出:

现在,让我们根据城市隐藏一列。我们说 City =“Edmonton”,我们隐藏控件。

因此,您使用 itemData 绑定事件。

在此示例中,我有绑定字段(单元格)集合隐藏示例,以及如何使用模板化控件(查找控件)执行此操作。

所以,代码是这样的:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
       GridViewRow gvRow = e.Row;

       // hide a Bound field
       TableCell f = gvRow.Cells(4);
       if (f.Text == "Edmonton")
           f.Style("Display") = "none";

       // hide a templated control

       Label lbl = gvRow.FindControl("lblCity");
       if (lbl.Text == "Edmonton")
           lbl.Style("Display") = "none";
   }
}

现在的输出是这样的:


0
投票

还没有尝试过,但看起来很有希望:)

© www.soinside.com 2019 - 2024. All rights reserved.