Подтвердить что ты не робот

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

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

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

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

Возвратите DataTable из хранимой процедуры, затем установите DataSource в gridview, а затем вызовите DataBind().

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

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

4b9b3361

Ответ 1

В ASP.Net 4.0 добавлено свойство boolean 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()

Ответ 2

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

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

Ответ 3

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

Ответ 4

Если вы работаете с 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

Это решение не требует кода С# или кода ASP.NET

  • Убедитесь, что нулевые столбцы указаны в соответствующие имена, иначе это не сработает.
  • Должен быть включен дополнительный блок, который является тем же самым запросом, что и в if not exists (query part)
  • В моем случае, если я использую @RepID вместо 10. Что отображается в окне DropDownList вне gridview.

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

Ответ 5

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

showheaderwhenEmpty Свойство

Ответ 6

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

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

Ответ 7

Добавьте это свойство в grid-view: ShowHeaderWhenEmpty = "True" это может помочь просто проверить

Ответ 8

Я нашел очень простое решение проблемы. Я просто создал два 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 со следующими характеристиками, и я поместил 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>

Ответ 9

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

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

Ответ 10

Вы можете установить для свойства ShowHeadersWhenNoRecords свойства ownertableview значение true. ASPX:

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

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

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

Ответ 11

<asp:GridView ID="grdGroup"  EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">

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

Ответ 12

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

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

Он не показывает заголовки, он отображает ваше сообщение "Нет записей". вместо этого.

Ответ 13

<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();  

Ответ 14

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

Ответ 15

Используйте шаблон 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>