【问题标题】:C# Hide a button when GridView on webpage is not shownC#当网页上的GridView不显示时隐藏一个按钮
【发布时间】:2023-03-05 18:19:01
【问题描述】:

我正在使用 C# VS2005 和 SQL Server 2005。

我有一个 GridView,它可以从 2 个表中导入数据,并且我在 GridView 下方有一个“导出”按钮,它允许导出 GridView 数据的结果。

但是,当 GridView 不显示时,我的导出按钮仍然显示。是否有条件地隐藏按钮并仅在显示 GridView 时显示它?下面是一个例如我的代码:

<%@ Page Language="C#" MasterPageFile="~/MainPage.master" AutoEventWireup="true" CodeFile="Comparison.aspx.cs" Inherits="UserDatabase" Title="User Comparison" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:<ConnectionString> %>" SelectCommand="<SQL>" OnSelecting="SqlDataSource1_Selecting">
    </asp:SqlDataSource>

<script language="javascript" type="text/javascript">
// <!CDATA[

// ]]>
</script>

    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
    </asp:GridView>
    <asp:Button ID="btnExpExcel" runat="server" Height="23px" OnClick="btnExpExcel_Click"
        Text="Export" Width="200px" />
</asp:Content>

【问题讨论】:

  • 把它们都放在一个面板中,隐藏面板而不是隐藏网格。
  • 按钮和gridview都有一个.Visible属性
  • @HasanKhan 我已经把它们都放在了一个panal中,当我的gridview没有显示时如何设置它来隐藏panal?
  • @RUiHAO "隐藏面板而不是网格视图"
  • 如果我设置面板网格的生存能力,如果我将其设置为false,它将始终隐藏,即使gridview中有数据

标签: c# asp.net sql visual-studio visual-studio-2005


【解决方案1】:

DataBound 事件添加到您的 Gridview。检查网格视图中的行并相应地设置可见性。

ASPX

<asp:GridView ID="GridView1" runat="server" 
     DataSourceID="SqlDataSource1" ondatabound="gv_DataBound" 
     >
</asp:GridView>

代码背后

protected void gv_DataBound(object sender, EventArgs e)
{
     btnExpExcel.Visible = GridView1.Rows.Count > 0;
     //The Following is actually better , but less readable
     //We cast the sender to Gridview. The sender is the control
     //initiating the event
     //btnExpExcel.Visible = ((GridView)sender).Rows.Count > 0;
}

【讨论】:

    【解决方案2】:

    在页面上放置一个面板,并以编程方式向其中添加 GridView 和 Button。想要显示面板时将其 Visible 属性设置为 true,不显示时将其设置为 false。

    【讨论】:

    • 他为什么需要以编程方式添加它们?
    • 个人喜好,实际上。我发现当您以编程方式添加 ASP.NET 内容时,它更易于操作,因为您有点与添加到页面的“静态”项目相关联(并且不想添加/编辑)。
    【解决方案3】:

    您可以在代码后面使用DataSource和DataBind代替DataSourceID,这样您可以检查数据源的数据以显示或隐藏导出按钮... 像这样的:

    if(!Page.IsPostBack){
      GridView1.DataSource = your_DataSet_or_DataTable_or_Anything;
      GirdView1.DataBind();
      if(your_DataSet_or_DataTable_or_Anything == null){
        btnExpExcel.Visible = false;
      }
    }
    

    ^^

    【讨论】:

    • 嗨 Hatake,我必须为 GridView1.DataSource = your_DataSet_or_DataTable_or_Anything 添加什么?我试过 GridView1.DataSource= SqlDataSource1;但它不起作用。它给了我错误
    • 删除aspx页面中的DataSourceID="SqlDataSource1"部分。在后面的代码中,该数据源是您从数据库或数组或任何包含数据的任何东西中获取的数据^^
    【解决方案4】:

    【讨论】:

      【解决方案5】:

      这样做..

      1. 创建一个方法来绑定gridview中的数据

        private void Export_Bind()
            {
                DataSet oDs_Export = new DataSet();
                oDs_Export = oFCC.GetExport(); ---> this is method which i have define in the Class Lib.
                if (oDs_Export.Tables[0].Rows.Count > 0)
                {
                    GridView1.DataSource = oDs_Export;
                    GridView1.DataBind();
                    lbGVCount.Text = oDs_Export.Tables[0].Rows.Count.ToString();
                    btnExpExcel.Enabled = true;  
        
                }
                    else
                    {
                       btnExpExcel.Enabled = false;
                     }
            }
        
      2. 然后page_load中的这个方法

        if(!IsPostBack) {

        Export_Bind(); }

        如果您觉得有用,请将其标记为您的答案,否则请告诉我...

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 2017-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多