我有一个网格视图,显示数据表中的条目。我让用户能够通过在网格视图标题中有一个文本框和搜索按钮来选择表中数据的子集。“搜索”按钮将激发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>
<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页面上“物理”控件的引用,因此我对本地对象所做的任何更改都会反映在页面上的控件中。
如果不是这样,那么获取对网格视图标题行中按钮控件的引用的最佳方法是什么?