GridView - Показать заголовки на пустой источник данных

голоса
73

В C # как я до сих пор показывают заголовки в GridView, даже с источником данных является пустым.

Я не автоматически генерировать столбцы, как все они предопределены.

В настоящее время, что я делаю следующее.

Получить DataTable обратно из хранимой процедуры, затем установите DataSource в GridView, а затем вызвать DataBind ().

Это прекрасно работает, когда у меня есть данные, но когда ни одна строка не возвращается, то я просто получаю пустое место, где сетка должна быть.

Изменить: Спасибо всем за собственность .NET 4+. Я спросил это обратно в .NET 3.5 дней. Это гораздо проще. :)

Задан 09/12/2008 в 22:52
источник пользователем
На других языках...                            


16 ответов

голоса
119

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>

Примечание: заголовки не будут появляться, если DataBind () вызывается с чем-то другим, чем нуль.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Ответил 17/02/2011 в 20:13
источник пользователем

голоса
30

После размещения этого я придумал способ, который работает. Тем не менее, я не чувствую, что это лучший способ справиться с этим. Любые предложения по лучшей один?

//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;
}
Ответил 09/12/2008 в 22:59
источник пользователем

голоса
5

Я просто работал через эту проблему, и ни одно из этих решений не будет работать для меня. Я не мог использовать EmptyDataTemplateсобственность , потому что я создаю мой GridViewдинамически настраиваемых полей , которые обеспечивают фильтры в заголовках. Я не мог использовать пример almny отвечал , потому что я использую ObjectDataSources вместо DataSetили DataTable. Тем не менее, я нашел этот ответ размещен на другой StackOverflow вопрос, который связывает с этим элегантным решением , что я был в состоянии сделать работу для моей конкретной ситуации. Она включает в себя переопределение CreateChildControlsметода из GridViewсоздания ту же строку заголовка , которая была бы создана уже там были реальные данные. Я подумал , что стоит разместить здесь, где это, вероятно, можно найти другие люди в подобной исправить.

Ответил 14/07/2009 в 22:05
источник пользователем

голоса
3

задавать "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty Имущество

Ответил 20/12/2012 в 12:21
источник пользователем

голоса
3

Если вы работаете с 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. Else блок должен быть включен, который тот же запрос, как в if not exists (query part)
  3. В моем случае, если я использую @RepID вместо 10. Что отображается в окне DropDownList вне GridView.

Каждый раз, когда я изменить падение вниз, чтобы выбрать другую репу, Gridview обновляется. Если запись не найдена, она показывает пустую строку.

Ответил 10/07/2012 в 16:28
источник пользователем

голоса
2

Вы можете использовать HeaderTemplate свойство для установки головки или использовать программно ListView вместо этого, если вы используете .NET 3.5.

Лично я предпочитаю ListView над GridView и DetailsView, если это возможно, это дает вам больший контроль над HTML.

Ответил 09/12/2008 в 23:07
источник пользователем

голоса
1

Вы можете установить ShowHeadersWhenNoRecords свойство ownertableview к истине. ASPX:

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

Кроме того, если источник данных для GridView является нулевым (если записи), вы можете попробовать установить его, как показано ниже: C #:

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();
Ответил 29/06/2016 в 10:24
источник пользователем

голоса
1

Juste добавить ShowHeaderWhenEmpty свойство и установить его на истинный

Это решение работает для меня

Ответил 27/02/2015 в 15:23
источник пользователем

голоса
1
<asp:GridView ID="grdGroup"  EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">

Это основной пример Gridview с EmptyDataText и ShowHeaderWhenEmpty

Ответил 06/09/2013 в 09:31
источник пользователем

голоса
1

Я нашел очень простое решение этой проблемы. Я просто создал два GridViews. Первый 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 со следующими характеристиками, и я поместить GridView внутри него с ShowHeader = «ложь», так что верхний ряд имеет тот же размер, как и все остальные строки.

<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>
Ответил 13/06/2012 в 18:53
источник пользователем

голоса
1

Добавить эту недвижимость в вашей сетке ракурса: ShowHeaderWhenEmpty = «True» это может помочь просто проверить

Ответил 18/04/2012 в 14:25
источник пользователем

голоса
0

Я использую жерех SqlDataSource. Он работал для меня, когда я установил CancelSelectOnNullParameter ложь, как показано ниже:

<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>

Ответил 24/01/2018 в 17:32
источник пользователем

голоса
-1
    <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/
Ответил 08/07/2015 в 08:47
источник пользователем

голоса
-1
<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();  
Ответил 08/07/2015 в 08:43
источник пользователем

голоса
-1

Вы можете использовать , EmptyDataTextкак показано ниже:

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

Она не показывает заголовки, это делает ваше сообщение «записей не найдено.» вместо.

Ответил 21/09/2012 в 18:40
источник пользователем

голоса
-3

Используйте EmptyDataTemplate, как показано ниже. Когда DataSource нет записей, вы увидите сетку с заголовками, и буквальный текст или HTML, который находится внутри тегов EmptyDataTemplate.

<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>
Ответил 09/12/2008 в 23:34
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more