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

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

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

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

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

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

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

В ASP.Net 4.0 добавлено свойство boolean ShowHeaderWhenEmpty .

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.showheaderwhenempty.aspx


       

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

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

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

set "

showheaderwhenEmpty Property

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

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

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

Я нашел очень простое решение проблемы. Я просто создал два GridView. Первый GridView назвал DataSource запросом, который был создан для возврата строк. Он просто содержал следующее:

            

Затем я создал div со следующими характеристиками, и я поместил GridView внутри него с помощью ShowHeader = “false”, чтобы верхняя строка была того же размера, что и все остальные строки.

 
  

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

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

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

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

   

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

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

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

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

  

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

        No Record Available  in CS Page gvEmployee.DataSource = dt; gvEmployee.DataBind(); 
         No Record Available  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, как показано ниже. Когда ваш DataSource не имеет записей, вы увидите свою сетку с заголовками и буквальный текст или HTML, который находится внутри тегов EmptyDataTemplate.

   No Results Found     ...   
  • Заголовок ответа jQuery и AJAX
  • Обнаружение, если файл PDF верен (заголовок PDF)
  • Установить заголовки с помощью jQuery.ajax и JSONP?
  • c ++ шаблон и файлы заголовков
  • Создание собственного файла заголовка в C
  • Приоритет: заголовок в письме
  • Вперед объявить контейнер STL?
  • В чем разница между .cpp-файлом и файлом .h?
  • Использование анонимных пространств имен в файлах заголовков
  • Как я могу заставить Makefile автоматически пересобирать исходные файлы, содержащие модифицированный заголовочный файл? (В C / C ++)
  • Давайте будем гением компьютера.