Xpoint
   [напомнить пароль]

asp:datalist и валидный HTML 5

Метки: [без меток]
2010-08-24 21:48:17 [обр] Alexey V.Zelenin(0/8)[досье]

Требуется сгенерировать таблицу с определённым количеством колонок — повторяющиеся элементы. Использую стандартный контрол asp:datalist. И всё бы ничего, но при этом ASP.NET генерирует HTML вида

<table id="ctl00_ContentPlaceHolder1_gvCategories" class="gvCategories" cellspacing="0" border="0" style="border-collapse:collapse;">

для такого кода:

        <asp:datalist 
            id="gvCategories" 
            runat="server" 
            EnableViewState="False" 
            RepeatLayout="table" 
            RepeatColumns="3" 
            RepeatDirection="Vertical"
            CssClass="gvCategories"
        >

Проблема в том, что этот HTML - невалидный для DOCTYPE html . Можно ли как-то заставить datalist не использовать атрибуты cellSpacing/cellPadding/border (я выставлю их в CSS). Или же существует подобный контрол, который позволит показать список элементов в таблице (никакие возможности для редактирования и прочие навороты микрософтовских контролов не нужны) без того, чтобы вручную пересчитывать номера элементов, чтобы определить, когда пора закрывать row и т.п.

спустя 1 час 49 минут [обр] Василий Свиридов(47/175)[досье]
Можете просто сделать через <asp:Repeater/> или через <asp:GridView/>, а можно ещё наверное сделать через ControlAdapter (тут подробнее), а ещё наверное можно сделать через файл настройки браузеров.
спустя 9 минут [обр] Alexey V.Zelenin(0/8)[досье]

Ну я пока сделал через Repeater, использую float: left, но ведь это не совсем таблицы — высота элементов может разниться, при этом начнут заползать друг под дружку и т.п.

А GridView, насколько я могу судить, тоже генерит cellPadding и cellSpacing

спустя 3 часа 49 минут [обр] Василий Свиридов(47/175)[досье]
Alexey V.Zelenin[досье]А зачем делать float, когда можно через тот-же Repeater генерить таблицу, но без мешающих параметров?
спустя 15 часов [обр] Alexey V.Zelenin(0/8)[досье]
Василий Свиридов[досье]
Я прошу пардону... а как заставить выводить n ячеек в строке? Вернее, как определять, когда выводить закрывающий и новый открывающий <tr> тэги?
спустя 11 часов [обр] Василий Свиридов(47/175)[досье]
Каждый record будет генерировать новый RepeaterItem.
<asp:Repeater>
  <headerTemplate>
    <table>
  </headerTemplate>
  <itemTemplate>
    <tr>
      <td><%# ((Type)Container.DataItem).Stuff %></td>
      <td><%# ((Type)Container.DataItem).OtherStuff %></td>
    </tr>
  </itemTemplate>
  <footerTemplate>
    </table>
  </footerTemplate>
</asp:Repeater>
спустя 15 часов [обр] Alexey V.Zelenin(0/8)[досье]

Василий Свиридов[досье]

Эх, не подходит такой вариант. Требуется, чтобы DataItem выстраивались по несколько элементов в строку. Например: возвращается список продуктов, требуется вывести их в таблицу по 3 продукта в строке. DataList позволяет это сделать при указании repeatColumns="3". В приводимом Вами примере в каждой строке будет лишь один DataItem (RepeaterItem)

спустя 1 день 8 часов [обр] Василий Свиридов(47/175)[досье]
Тогда пишите адаптер...
спустя 5 дней [обр] Alexey V.Zelenin(0/8)[досье]

Василий Свиридов[досье]
попробовал применить адаптер, но с первой попытки получился очень странный вариант - при его использовании таблица стала дублироваться. Я переписал событие RenderBeginTag, чтобы отрисовывалась таблица без cellPadding и cellSpacing

Короче, очевидно, оставлю на будущее использование адаптера, пока обойдусь флоатами. Спасибо за помощь.

Powered by POEM™ Engine Copyright © 2002-2005