81

C# では、データ ソースが空であっても、グリッドビューのヘッダーを表示するにはどうすればよいですか。

列はすべて事前定義されているため、列は自動生成されません。

現在、私がやっていることは次のとおりです。

ストアド プロシージャから DataTable を取得し、グリッドビューの DataSource を設定してから、DataBind() を呼び出します。

これは、データがある場合は正常に機能しますが、行が返されない場合は、グリッドがあるはずの場所が空白になります。

編集: .NET 4+ プロパティに感謝します。私は .NET 3.5 の時代にこれを尋ねました。これは今ではずっと簡単です。:)

4

16 に答える 16

143

ASP.Net 4.0 では、booleanShowHeaderWhenEmptyプロパティが追加されました。

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>

注: DataBind() が null 以外で呼び出されない限り、ヘッダーは表示されません。

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
于 2011-02-17T19:13:28.223 に答える
35

これを投稿した後、私はうまくいく方法を思いつきました。ただし、これを処理するのが最善の方法だとは思いません。より良いものに関する提案はありますか?

//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;
}
于 2008-12-09T21:59:50.087 に答える
5

私はちょうどこの問題に取り組んでいましたが、これらの解決策はどれもうまくいきませんでした。ヘッダーにフィルターを提供するカスタム フィールドを使用しEmptyDataTemplateて動的に作成していたため、プロパティを使用できませんでした。orの代わりに s をGridView使用しているため、投稿された almny の例を使用できませんでした。ただし、別の StackOverflow の質問に投稿されたこの回答を見つけました。これは、特定の状況で機能させることができたこのエレガントなソリューションにリンクしています。のメソッドをオーバーライドして、実際のデータがあった場合に作成されるのと同じヘッダー行を作成する必要があります。ここに投稿する価値があると思いました。他の人が同様の修正で見つけた可能性が高い場所です。ObjectDataSourceDataSetDataTableCreateChildControlsGridView

于 2009-07-14T21:05:12.647 に答える
4

ASP.NET 3.5 以前を使用していて、問題が私のように比較的単純な場合は、SQL クエリから null 行を返すだけで済みます。

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. null 列を適切な名前にキャストしていることを確認してください。そうしないと、機能しません。
  2. と同じクエリである Else ブロックを含める必要があります。if not exists (query part)
  3. 私の場合、10 の代わりに @RepID を使用している場合、これは gridview の外の DropDownList ボックスにマップされます。

ドロップダウンを変更して別の担当者を選択するたびに、Gridview が更新されます。レコードが見つからない場合は、NULL 行が表示されます。

于 2012-07-10T15:28:32.100 に答える
3

設定"<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty財産

于 2012-12-20T11:21:28.963 に答える
2

ownertableview の ShowHeadersWhenNoRecords プロパティを true に設定できます。aspx:

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

また、GridView のデータソースが null の場合 (レコードがない場合) は、次のように設定してみてください: c#:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
于 2016-06-29T10:24:45.370 に答える
2

.NET 3.5 を使用している場合は、HeaderTemplate プロパティを使用してヘッドをプログラムでセットアップするか、代わりに ListView を使用できます。

個人的には、可能な場合は GridView や DetailsView よりも ListView を好みます。これにより、html をより細かく制御できます。

于 2008-12-09T22:07:01.880 に答える
1

私はこの問題に対する非常に簡単な解決策を見つけました。2つの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>
于 2012-06-13T17:53:30.190 に答える
1

ShowHeaderWhenEmpty プロパティを追加して true に設定するだけです

この解決策は私のために働く

于 2015-02-27T15:23:48.140 に答える
1

このプロパティをグリッドビューに追加します: ShowHeaderWhenEmpty="True" チェックするだけで役立つ場合があります

于 2012-04-18T13:25:42.450 に答える
-1
<asp:GridView ID="gvEmployee" runat="server"    
                 AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”&gt;  
                    <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();  
于 2015-07-08T08:43:44.783 に答える
-2

EmptyDataText以下に示すように使用できます。

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

ヘッダーは表示されず、「エントリが見つかりません」というメッセージが表示されます。代わりは。

于 2012-09-21T17:40:00.650 に答える
-2
    <asp:GridView ID="gvEmployee" runat="server"    
                     AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”&gt;  
                        <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/
于 2015-07-08T08:47:21.617 に答える
-3

以下のように 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>
于 2008-12-09T22:34:04.557 に答える