【问题标题】:GridView - Show headers on empty data sourceGridView - 在空数据源上显示标题
【发布时间】:2010-09-26 03:28:10
【问题描述】:

在 C# 中,即使数据源为空,我如何仍然显示网格视图的标题。

我不会自动生成列,因为它们都是预定义的。

目前我正在做的事情如下。

从存储过程中取回一个DataTable,然后设置gridview的DataSource,然后调用DataBind()。

当我有数据时这很好用,但是当没有返回行时,我只会得到一个网格应该在的空白点。

编辑:感谢所有 .NET 4+ 属性。我在 .NET 3.5 天时问过这个问题。这现在容易多了。 :)

【问题讨论】:

    标签: asp.net gridview header


    【解决方案1】:

    ASP.Net 4.0 添加了布尔值ShowHeaderWhenEmpty 属性。

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.showheaderwhenempty.aspx


    <asp:GridView runat="server" ID="GridView1" ShowHeaderWhenEmpty="true" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="First Name" DataField="FirstName" />
            <asp:BoundField HeaderText="Last Name" DataField="LastName" />
        </Columns>
    </asp:GridView>
    

    注意:除非使用 null 以外的其他值调用 DataBind(),否则标题不会出现。

    GridView1.DataSource = New List(Of String)
    GridView1.DataBind()
    

    【讨论】:

    • 确保你至少数据绑定了一些东西,ShowHeadersWhenEmpty 至少需要一个空列表数据绑定。
    • @Tenerezza 提到的内容很重要,请在答案中包含这一点。这样可以节省一些时间。
    【解决方案2】:

    发布此内容后,我确实想出了一种可行的方法。但是,我不认为这是处理此问题的最佳方法。有更好的建议吗?

    //Check to see if we get rows back, if we do just bind.
    
    if (dtFunding.Rows.Count != 0)
    {
        grdFunding.DataSource = dtFunding;
        grdFunding.DataBind();
    }
    else
    {
      //Other wise add a emtpy "New Row" to the datatable and then hide it after binding.
    
         dtFunding.Rows.Add(dtFunding.NewRow());
         grdFunding.DataSource = dtFunding;
         grdFunding.DataBind();
         grdFunding.Rows[0].Visible = false;
    }
    

    【讨论】:

    • 这也可以解决问题。 dtFunding.DataSource = dtFunding; dtFunding.DataBind();
    【解决方案3】:

    我刚刚解决了这个问题,这些解决方案都不适合我。我无法使用EmptyDataTemplate 属性,因为我正在使用在标题中提供过滤器的自定义字段动态创建GridView。我无法使用发布的示例 almny,因为我使用的是 ObjectDataSources 而不是 DataSetDataTable。但是,我发现 this answer 发布在另一个 StackOverflow 问题上,该问题链接到 this elegant solution,我能够针对我的特定情况进行工作。它涉及覆盖GridViewCreateChildControls 方法,以创建与如果有真实数据会创建的相同标题行。我认为它值得在这里发布,其他人可能会在类似的修复中找到它。

    【讨论】:

      【解决方案4】:

      如果您使用的是 ASP.NET 3.5 及更低版本,并且您的问题像我一样相对简单,您可以从 SQL 查询中返回一个空行。

      if not exists (select RepId, startdate,enddate from RepTable where RepID= 10)
           select null RepID,null StartDate,null EndDate
      else
           select RepId, startdate,enddate from RepTable where RepID= 10
      

      此解决方案不需要任何 C# 代码或 ASP.NET 代码

      1. 确保将空列转换为适当的名称,否则将不起作用。
      2. 必须包含其他块,这与if not exists (query part) 中的查询相同
      3. 在我的情况下,如果我使用 @RepID 而不是 10。它映射到 gridview 外部的 DropDownList 框。

      每次我更改下拉菜单以选择不同的代表时,Gridview 都会更新。如果没有找到记录,则显示空行。

      【讨论】:

      • 感谢哈马德汗。这对我们有用。我已经阅读了几十个关于此的线程,这是我遇到的这种仅 SQL(或主要是 SQL-我需要隐藏空行)方法的唯一出现。对我们来说更重要的是:它会导致页脚也被显示,这比显示页眉更难。 :)
      • 很高兴它对你有用,相当简单的解决方案:)
      【解决方案5】:

      设置"&lt;asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

      showheaderwhenEmpty 属性

      【讨论】:

        【解决方案6】:

        如果您使用的是 .NET 3.5,您可以使用 HeaderTemplate 属性以编程方式设置头部或使用 ListView。

        就个人而言,如果可能的话,我更喜欢 ListView 而不是 GridView 和 DetailsView,它可以让你更好地控制你的 html。

        【讨论】:

          【解决方案7】:

          您可以将 ownertableview 的 ShowHeadersWhenNoRecords 属性设置为 true。 aspx:

          <asp:GridView ID="RadGrid2" runat="server" >       
          <MasterTableView ShowHeadersWhenNoRecords="true"  > 
          

          另外当GridView的数据源为null时(无记录时),你可以尝试如下设置: 时间:

            if (GridView1.DataSource == null)  
            {  
                  GridView1.DataSource = new string[] { };  
            } 
            GridView1.DataBind();
          

          【讨论】:

            【解决方案8】:

            将此属性添加到您的网格视图: ShowHeaderWhenEmpty="True" 它可能有助于检查

            【讨论】:

              【解决方案9】:

              我找到了一个非常简单的解决方案。我只是创建了两个 GridView。第一个 GridView 调用 DataSource,其查询旨在不返回任何行。它只包含以下内容:

                  <Columns>
                      <asp:TemplateField HeaderStyle-HorizontalAlign="Left">
                          <HeaderTemplate>
              
                             <asp:Label ID="lbl0" etc.>  </asp:Label>
                             <asp:Label ID="lbl1" etc.>  </asp:Label>
              
                          </HeaderTemplate>
                      </asp:TemplateField>
                  </Columns>
              

              然后我创建了一个具有以下特征的 div,并在其中放置了一个带有 ShowHeader="false" 的 GridView,以便顶行与所有其他行的大小相同。

              <div style="overflow: auto; height: 29.5em; width: 100%">
                  <asp:GridView ID="Rollup" runat="server" ShowHeader="false" DataSourceID="ObjectDataSource">
                      <Columns>
                          <asp:TemplateField HeaderStyle-HorizontalAlign="Left">
                              <ItemTemplate>
              
                             <asp:Label ID="lbl0" etc.>  </asp:Label>
                             <asp:Label ID="lbl1" etc.>  </asp:Label>
              
                              </ItemTemplate>
                          </asp:TemplateField>
                      </Columns>
                  </asp:GridView>
              </div>
              

              【讨论】:

                【解决方案10】:
                <asp:GridView ID="grdGroup"  EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">
                

                这是一个带有 EmptyDataText 和 ShowHeaderWhenEmpty 的 Gridview 的基本示例

                【讨论】:

                  【解决方案11】:

                  只需添加 ShowHeaderWhenEmpty 属性并将其设置为 true

                  这个解决方案适合我

                  【讨论】:

                    【解决方案12】:

                    我使用的是 asp sqlDataSource。当我将 CancelSelectOnNullParameter 设置为 false 时,它​​对我有用,如下所示:

                    &lt;asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"&gt; &lt;/asp:SqlDataSource&gt;

                    【讨论】:

                      【解决方案13】:
                      <asp:GridView ID="gvEmployee" runat="server"    
                                       AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”>  
                                          <Columns>  
                                              <asp:BoundField DataField="Id" HeaderText="Id" />  
                                              <asp:BoundField DataField="Name" HeaderText="Name" />  
                                              <asp:BoundField DataField="Designation" HeaderText="Designation" />  
                                              <asp:BoundField DataField="Salary" HeaderText="Salary"  />  
                                          </Columns>  
                                          <EmptyDataTemplate>No Record Available</EmptyDataTemplate>  
                                      </asp:GridView>  
                      
                      
                      in CS Page
                      
                      gvEmployee.DataSource = dt;  
                      gvEmployee.DataBind();  
                      

                      【讨论】:

                      • 请解释您的代码。仅代码的答案往往对 OP 没有用处。
                      【解决方案14】:

                      您可以使用EmptyDataText,如下所示:

                      <asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false"
                                EmptyDataText="No entries found.">
                      

                      它不显示标题,它会呈现您的消息“未找到条目”。而是。

                      【讨论】:

                      • 这不是我所要求的。我正在寻找一种显示空网格的方法,带有标题。我知道我可以一直使用 EmptyDataText,但我的要求特别要求一个空网格,如果不存在数据,则带有标题。
                      【解决方案15】:
                          <asp:GridView ID="gvEmployee" runat="server"    
                                           AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”>  
                                              <Columns>  
                                                  <asp:BoundField DataField="Id" HeaderText="Id" />  
                                                  <asp:BoundField DataField="Name" HeaderText="Name" />  
                                                  <asp:BoundField DataField="Designation" HeaderText="Designation" />  
                                                  <asp:BoundField DataField="Salary" HeaderText="Salary"  />  
                                              </Columns>  
                                              <EmptyDataTemplate>No Record Available</EmptyDataTemplate>  
                                          </asp:GridView>  
                      
                      
                          in CS Page
                      
                          gvEmployee.DataSource = dt;  
                          gvEmployee.DataBind();  
                      
                      Help.. see that link:
                      http://www.c-sharpcorner.com/UploadFile/d0e913/how-to-display-the-empty-gridview-in-case-of-no-records-in-d/
                      

                      【讨论】:

                        【解决方案16】:

                        使用如下所示的 EmptyDataTemplate。当您的 DataSource 没有记录时,您将看到带有标题的网格,以及 EmptyDataTemplate 标记内的文字文本或 HTML。

                        <asp:GridView ID="gvResults" AutoGenerateColumns="False" HeaderStyle-CssClass="tableheader" runat="server">
                            <EmptyDataTemplate>
                                <asp:Label ID="lblEmptySearch" runat="server">No Results Found</asp:Label>
                            </EmptyDataTemplate>
                            <Columns>
                                <asp:BoundField DataField="ItemId" HeaderText="ID" />
                                <asp:BoundField DataField="Description" HeaderText="Description" />
                                ...
                            </Columns>
                        </asp:GridView>
                        

                        【讨论】:

                          猜你喜欢
                          • 2011-01-03
                          • 2015-07-09
                          • 1970-01-01
                          • 2012-03-13
                          • 2017-09-18
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多