在 C# 中,即使数据源为空,我如何仍然显示 gridview 的标题。
我不会自动生成列,因为它们都是预定义的。
目前我正在做的事情如下。
从存储过程中取回一个DataTable,然后设置gridview的DataSource,然后调用DataBind()。
当我有数据时这很好用,但是当没有返回任何行时,我只会得到一个网格应该在的空白点。
编辑:感谢所有 .NET 4+ 属性。我在 .NET 3.5 天时问过这个问题。这现在容易多了。:)
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()
发布此内容后,我确实想出了一种可行的方法。但是,我不认为这是处理此问题的最佳方法。有更好的建议吗?
//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;
}
我只是在解决这个问题,这些解决方案都不适合我。我无法使用该属性,因为我正在使用在标题中提供过滤器的自定义字段动态EmptyDataTemplate
创建我的。GridView
我无法使用发布的示例 almny,因为我使用的是ObjectDataSource
s 而不是DataSet
or DataTable
。但是,我发现这个答案发布在另一个 StackOverflow 问题上,该问题链接到这个优雅的解决方案,我能够针对我的特定情况进行工作。它涉及覆盖 的CreateChildControls
方法GridView
来创建相同的标题行,如果有真实数据则会创建。我认为它值得在这里发布,其他人可能会在类似的修复中找到它。
如果您使用的是 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 代码
if not exists (query part)
每次我更改下拉菜单以选择不同的代表时,Gridview 都会更新。如果未找到记录,则显示空行。
放"<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""
showheaderwhenEmpty
财产
如果您使用的是 .NET 3.5,您可以使用 HeaderTemplate 属性以编程方式设置头部或使用 ListView。
就个人而言,如果可能的话,我更喜欢 ListView 而不是 GridView 和 DetailsView,它可以让你更好地控制你的 html。
您可以将 ownertableview 的 ShowHeadersWhenNoRecords 属性设置为 true。aspx:
<asp:GridView ID="RadGrid2" runat="server" >
<MasterTableView ShowHeadersWhenNoRecords="true" >
此外,当 GridView 的数据源为空时(没有记录时),您可以尝试如下设置: c#:
if (GridView1.DataSource == null)
{
GridView1.DataSource = new string[] { };
}
GridView1.DataBind();
将此属性添加到您的网格视图: ShowHeaderWhenEmpty="True" 它可能有助于检查
我找到了一个非常简单的解决方案。我只是创建了两个 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>
<asp:GridView ID="grdGroup" EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">
这是带有 EmptyDataText 和 ShowHeaderWhenEmpty 的 Gridview 的基本示例
只需添加 ShowHeaderWhenEmpty 属性并将其设置为 true
这个解决方案对我有用
我正在使用 asp sqlDataSource。当我将 CancelSelectOnNullParameter 设置为 false 时,它对我有用,如下所示:
<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>
<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();
你可以使用EmptyDataText
如下图:
<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();
Help.. see that link:
http://www.c-sharpcorner.com/UploadFile/d0e913/how-to-display-the-empty-gridview-in-case-of-no-records-in-d/
使用如下所示的 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>