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



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



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



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



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



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



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

917   16  

16 ответов:

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 () не вызывается с чем-то другим, кроме null.

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, потому что я использую ObjectDataSources вместо DataSet или 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 код

  1. убедитесь, что вы бросили пустые столбцы в соответствующие имена, иначе это не будет работать.
  2. Else блок должен быть включен, который является тот же запрос, что и в if not exists (query part)
  3. в моем случае, если я использую @RepID вместо этого из 10. Который сопоставляется с выпадающим списком за пределами gridview.

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

set "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty свойства

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

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

добавьте это свойство в сетку: ShowHeaderWhenEmpty= " True" это может помочь просто проверить

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

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

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

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

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

вы можете установить showheaderswhennorecords свойство ownertableview в true. aspx:

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

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

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

я использовал asp sqlDataSource. Это сработало для меня, когда я установил CancelSelectOnNullParameter в false, как показано ниже:

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

вы можете использовать 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();  
    <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, как показано ниже. Когда ваш источник данных не имеет записей, вы увидите свою сетку с заголовками и литеральный текст или 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>

Comments

    Ничего не найдено.