代码之家  ›  专栏  ›  技术社区  ›  Ken Ray

在GridView标题中设置按钮控件的可见性

  •  0
  • Ken Ray  · 技术社区  · 14 年前

    我有一个网格视图,显示数据表中的条目。我让用户能够通过在网格视图标题中有一个文本框和搜索按钮来选择表中数据的子集。“搜索”按钮将激发GridView行命令,并更改基础sqldatasource的select命令,并将文本框中的文本值作为参数添加。

    这项工作进展顺利。

    另外,我在标题中有一个“全部显示”按钮,它清除了选择参数,因此显示了表中的所有条目。同样,这是完美的。

    不起作用的是控制“全部显示”按钮控件的可见性。以下是数据网格标题模板的HTML标记:

    <HeaderTemplate>
        <asp:Button ID="btnShowAll" runat="server" CausesValidation="False" CommandName="ShowAll" Text="Show All" />
        <asp:Button ID="btnSearch" runat="server" CausesValidation="True" CommandName="Search" Text="Search" ValidationGroup="vldSearch" /><br />
        <asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox>&nbsp;
        <asp:RequiredFieldValidator ID="vldSearchName" runat="server" ErrorMessage="You have to provide an attorney name to search for." Text="*" ControlToValidate="txtSearchName" ValidationGroup="vldSearch" ForeColor="White"></asp:RequiredFieldValidator>
    </HeaderTemplate>
    

    在行命令事件处理程序中,以下是我如何设置按钮的可见性:

    If Not Me.dgAttorneys.HeaderRow Is Nothing Then
        Dim btnShowAll As Button = Me.dgAttorneys.HeaderRow.FindControl("btnShowAll")
        btnShowAll.Visible = Me.sqlAttorneys.SelectParameters.Count > 0
        Trace.Write("Show all status is " & btnShowAll.Visible.ToString)
    End If
    

    trace语句显示的是正确的可见状态-如果单击了“全部显示”按钮,我将在sqlattornes sqldatasource上执行selectParameters.clear()。

    我的问题是因为对“findcontrol”方法如何工作的误解-我假设我定义的新btnshowall实际上是对aspx页面上“物理”控件的引用,因此我对本地对象所做的任何更改都会反映在页面上的控件中。

    如果不是这样,那么获取对网格视图标题行中按钮控件的引用的最佳方法是什么?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Ken Ray    14 年前

    我设法使按钮行为起作用——这一切都与我在整个过程中设置按钮可见性的位置有关。我将代码块(基于搜索参数的存在设置按钮可见性)移动到数据网格的数据绑定事件,并且按钮的可见性设置为它应该设置的样子。

    我怀疑这是因为在整个数据绑定过程中,根据整个网格视图和每个网格行的状态,使用适当的模板对象来呈现每一行。因此,对按钮的可见属性所做的任何更改都将在数据绑定过程中被重写。通过移动我的代码来设置可见性,直到数据绑定完成后,它才生效。