我有一個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頁面上「物理」控件的引用,所以我對我的本地對象反映在頁面上的控件上。
如果不是這種情況,究竟是去網格視圖的標題行中的按鈕控制的參考的最佳方式?