2010-11-08 68 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事件中,并且该按钮的可见性被设置为它应该是的。

我怀疑这是因为在整个数据绑定过程,基于整个网格视图的状态,并且每一个网格行,用于呈现的每一行相应的模板对象。因此,在数据绑定过程中,对按钮的可见属性所做的任何更改都将被覆盖。通过移动我的代码来设置可见性,直到数据绑定完成后,才会生效。