Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net GridView-在空数据源上显示标题_Asp.net_Gridview_Header - Fatal编程技术网

Asp.net GridView-在空数据源上显示标题

Asp.net GridView-在空数据源上显示标题,asp.net,gridview,header,Asp.net,Gridview,Header,在C#中,即使数据源为空,如何仍显示gridview的标题 我不是自动生成列,因为它们都是预定义的 目前我正在做的事情如下 从存储过程获取DataTable,然后设置gridview的数据源,然后调用DataBind() 当我有数据时,这可以很好地工作,但是当没有返回行时,我只会在网格应该位于的地方得到一个空白点 编辑:感谢大家提供.NET 4+属性。我在.NET 3.5天的时候问过这个问题。这现在容易多了。:)在发布这篇文章之后,我确实想出了一个可行的方法。然而,我觉得这不是最好的处理方法。有

在C#中,即使数据源为空,如何仍显示gridview的标题

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

目前我正在做的事情如下

从存储过程获取DataTable,然后设置gridview的数据源,然后调用DataBind()

当我有数据时,这可以很好地工作,但是当没有返回行时,我只会在网格应该位于的地方得到一个空白点


编辑:感谢大家提供.NET 4+属性。我在.NET 3.5天的时候问过这个问题。这现在容易多了。:)

在发布这篇文章之后,我确实想出了一个可行的方法。然而,我觉得这不是最好的处理方法。有没有更好的建议

//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;
}

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


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

使用如下所示的EmptyDataTemplate。当数据源没有记录时,您将看到带有标题的网格,以及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>

未找到任何结果
...

我刚刚解决了这个问题,这些解决方案都不适合我。我无法使用
EmptyDataTemplate
属性,因为我正在使用在标题中提供过滤器的自定义字段动态创建我的
GridView
。我无法使用almny发布的示例,因为我使用的是
ObjectDataSource
s,而不是
DataSet
DataTable
。然而,我在另一个StackOverflow问题上发现了帖子,它链接到我能够为我的特殊情况工作。它涉及覆盖
GridView
CreateChildControls
方法,以创建与实际数据相同的标题行。我认为它值得在这里发布,其他人可能会在类似的补丁中找到它。

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



将此属性添加到网格视图:ShowHeaderWhenEmpty=“True”
检查一下可能会有帮助。我找到了一个非常简单的解决问题的方法。我只是创建了两个GridView。第一个GridView调用了一个数据源,其查询设计为不返回任何行。它只包含以下内容:

    <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>

如果您使用的是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代码

  • 确保将空列强制转换为适当的名称,否则将无法工作
  • 如果不存在(查询部分)
  • 在我的情况下,如果我使用@RepID而不是10。映射到gridview外部的DropDownList框

  • 每次我更改下拉列表以选择不同的代表时,Gridview都会更新。如果未找到任何记录,则显示空行。

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

    <asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false"
              EmptyDataText="No entries found.">
    
    
    
    它不显示标题,而是呈现消息“未找到条目”。

    set
    
    
    这是具有EmptyDataText和ShowHeaderWhenEmpty的Gridview的基本示例

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

    此解决方案适用于我

    
    
    <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();  
    
    没有可用的记录 在CS页面中 gvEmployee.DataSource=dt; gvEmployee.DataBind();
    
    没有可用的记录
    在CS页面中
    gvEmployee.DataSource=dt;
    gvEmployee.DataBind();
    帮助..查看该链接:
    http://www.c-sharpcorner.com/UploadFile/d0e913/how-to-display-the-empty-gridview-in-case-of-no-records-in-d/
    
    您可以将ownertableview的ShowHeadersWhenNoRecords属性设置为true。 aspx:


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


    这也会起作用。dtFunding.DataSource=dtFunding;dtFunding.DataBind();确保您至少要进行数据绑定,ShowHeadersWhenEmpty需要至少一个空列表数据绑定。@Tenerezza提到的内容很重要,请在回答中包括这一点。这将节省一些时间。这并不是我所要求的。我正在寻找一种方法来显示带有标题的空网格。我知道我可以一直使用emptyyDataText,但我的要求特别要求在没有数据存在的情况下使用带有标题的空网格。请解释您的代码。仅代码的答案对OP不太有用。谢谢Hammad Khan。这对我们很有效。我已经阅读了几十篇关于此的文章,这是唯一出现此SQL的文章(或者主要是SQL-我需要隐藏空行)我遇到的方法。对我们来说更重要的是:它会导致页脚也显示出来,这比显示页眉更困难。:)很高兴它
    <asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false"
              EmptyDataText="No entries found.">
    
    <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();  
    
        <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/
    
    <asp:GridView ID="RadGrid2" runat="server" >       
    <MasterTableView ShowHeadersWhenNoRecords="true"  > 
    
      if (GridView1.DataSource == null)  
      {  
            GridView1.DataSource = new string[] { };  
      } 
      GridView1.DataBind();