Asp.net 在GridView标题中设置按钮控件的可见性
我有一个gridview,它显示数据表中的条目。通过在网格视图标题中使用文本框和搜索按钮,用户可以选择表中数据的子集。“搜索”按钮触发gridview行命令,并更改基础sqlDataSource的select命令,并将文本框中的文本值作为参数添加 这工作很顺利 此外,我在标题中有一个“ShowAll”按钮,用于清除选择参数,因此表中的所有条目都会显示出来。同样,这是完美的 不起作用的是控制“全部显示”按钮控件的可见性。以下是数据网格标头模板的html标记:Asp.net 在GridView标题中设置按钮控件的可见性,asp.net,webforms,Asp.net,Webforms,我有一个gridview,它显示数据表中的条目。通过在网格视图标题中使用文本框和搜索按钮,用户可以选择表中数据的子集。“搜索”按钮触发gridview行命令,并更改基础sqlDataSource的select命令,并将文本框中的文本值作为参数添加 这工作很顺利 此外,我在标题中有一个“ShowAll”按钮,用于清除选择参数,因此表中的所有条目都会显示出来。同样,这是完美的 不起作用的是控制“全部显示”按钮控件的可见性。以下是数据网格标头模板的html标记: <HeaderTemplate&
<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>
<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>
trace语句正在显示正确的可见状态-如果单击“show all”按钮,我将在sqlAttorneys sqlDataSource上执行SelectParameters.Clear()操作
我的问题是因为误解了“FindControl”方法的工作原理——我假设我定义的新BTN showall实际上是对aspx页面上“物理”控件的引用,因此我对本地对象所做的任何更改都会反映在页面上的控件中
如果不是这样,那么获取网格视图标题行中按钮控件引用的最佳方法是什么?我成功地使按钮行为正常工作-这与我在整个过程中设置按钮可见性的位置有关。我将代码块(基于搜索参数的存在设置按钮可见性)移动到数据网格的数据绑定事件中,按钮的可见性被设置为它应该的样子 我怀疑这是因为在整个数据绑定过程中,根据整个网格视图和每个网格行的状态,使用适当的模板对象渲染每一行。因此,对按钮的visible属性所做的任何更改都将在数据绑定过程中被覆盖。通过改变代码设置可见性,直到数据绑定完成后,它才生效
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