我有一个gridview显示数据表中的条目。我让用户能够通过在网格视图标题中包含文本框和搜索按钮来选择表中数据的子集。搜索按钮触发gridview行命令,并更改基础sqlDataSource的select命令,并将文本框中的文本值作为参数添加。在GridView标题中设置按钮控件的可见性
该工程进展顺利。
另外,我在报头中的“全部显示”按钮,在送走选择参数,所以表中的所有条目中。再次,这完美地工作。
什么不工作是控制“全部显示”按钮控件的可见性。下面是在数据网格头模板中的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
跟踪语句显示正确的可见状态 - 如果单击“显示全部”按钮,我在sqlAttorneys sqlDataSource上执行SelectParameters.Clear()。
是我的问题,由于误解了“FindControl”方法的工作原理 - 我假设我定义的新btnShowAll实际上是对aspx页面上“物理”控件的引用,所以我对我的本地对象反映在页面上的控件上。
如果不是这种情况,究竟是去网格视图的标题行中的按钮控制的参考的最佳方式?