GridView - отображать заголовки на пустом источнике данных
В С#, как я все еще показываю заголовки gridview, даже если источник данных пуст.
Я не создаю автоматически столбцы, поскольку все они предопределены.
В настоящее время я делаю следующее.
Возвратите DataTable из хранимой процедуры, затем установите DataSource в gridview, а затем вызовите DataBind().
Это отлично работает, когда у меня есть данные, но когда никакие строки не возвращаются, я просто получаю пустое место, где должна быть сетка.
Изменить: Спасибо всем за свойство .NET 4+. Я спросил об этом в .NET 3.5 днях. Теперь это намного проще.:)
Ответы
Ответ 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>