2010-11-08 76 views
0

我有一個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>&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 

跟蹤語句顯示正確的可見狀態 - 如果單擊「顯示全部」按鈕,我在sqlAttorneys sqlDataSource上執行SelectParameters.Clear()。

是我的問題,由於誤解了「FindControl」方法的工作原理 - 我假設我定義的新btnShowAll實際上是對aspx頁面上「物理」控件的引用,所以我對我的本地對象反映在頁面上的控件上。

如果不是這種情況,究竟是去網格視圖的標題行中的按鈕控制的參考的最佳方式?

回答

0

我設法按鈕行爲的工作 - 這是所有做,其中在整個過程中我設置按鈕的可見性。我將該代碼塊(基於搜索參數的存在性設置按鈕可見性)移動到數據網格的DataBound事件中,並且該按鈕的可見性被設置爲它應該是的。

我懷疑這是因爲在整個數據綁定過程,基於整個網格視圖的狀態,並且每一個網格行,用於呈現的每一行相應的模板對象。因此,在數據綁定過程中,對按鈕的可見屬性所做的任何更改都將被覆蓋。通過移動我的代碼來設置可見性,直到數據綁定完成後,纔會生效。