2010-12-04 3 views
7

DataListis с <table> или <span> тегами, которые я не хочу.Удаление тегов таблицы и span из asp: DataList

Я установил RepeatLayout="Flow", но это все еще дает мне пробелы. Я установил RepeaterDirection="Horizontal", но это все равно дает мне таблицы.

Как я могу получить простой datalist без всех пролетов \ таблиц?

<asp:DataList ID="MyDataList" runat="server" RepeatLayout="Flow" RepeatDirection="Horizontal"> 
    <ItemTemplate> 
    .... 
    </ItemTemplate> 
</asp:Datalist> 

Заранее благодарен!

ответ

12

Вам нужно, чтобы это был элемент управления DataList? Вы можете иметь полный контроль над отображаемым HTML, используя Repeater или даже просто перебирать объекты и вручную выводить свой результат.

+0

ну, просто разобрав запрос из db в список .. я просто хочу управлять стилем .. используя ретранслятор не даст мне span \ tables? просто данные? – NATTO 2010-12-04 16:43:03

+0

@Nat: ретранслятор позволяет указать любой html, который вы хотите. – Chris 2010-12-04 16:44:45

3

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

Bascially, создайте asp-ретранслятор, привяжите свои данные к нему так же, как и datalist, и создайте свою разметку в теге itemtemplate. (Предупреждение это из памяти. - Я на ровинге ноутбука, так что не имею Visual Studio для проверки синтаксиса)

<asp:Repeater runat="server" id="MyRepeater"> 
    <HeaderTemplate><h1>My Data Title</h1></HeaderTemplate> 
    <ItemTemplate> 
     <p>Any Markup you want. This bit gets repeated</p> 
     <%#Container.DataItem("DataKeyOrColumnName")%> 
    </ItemTemplate> 
    <FooterTemplate><p>The footter (and header) only appear once.</p><p>you could use them to start and end a list or table</p></FooterTemplate> 
</asp:Repeater> 

Вы получите только разметку вы положили в шаблонах, больше ничего. Вы можете пропустить верхний и нижний колонтитулы, если они вам не нужны. И если вы не хотите разметки вообще, просто не используйте теги в своем шаблоне, данные выйдут в виде обычного текста.

6

Иногда вы не можете использовать Repeater, поскольку DataList предоставляет дополнительные возможности (например, обновление базы данных с помощью команд UPDATE и DELETE, работающих непосредственно с asp: DataSource).

Поэтому, если вам все еще нужно использовать DataList, но вы хотите избежать его html, вы можете сделать немного jQuery поверх него, как я это сделал.

код ASPX:

<ul class="list"> 
    <asp:DataList ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="photo_id" RepeatLayout="Flow" RepeatDirection="Horizontal"> 
     <ItemTemplate> 
      <li class="item" id='<%# Eval("photo_id") %>'> 
       Whatever else you need here. 
      </li> 
      </ItemTemplate> 
     </asp:DataList> 
    </ul> 

Это будет производить HTML, как это:

<span id="SomeId" style=""> 
    <span> 
     <li class="item ui-droppable" id="31349"> 
     Whatever else you need here. 
    </li> 
    </span> 
</span> 

Очевидно, что существует 2 пролетных метки не нужно. Чтобы удалить их, вы можете добавить скрипт jQuery на странице.

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.item').unwrap(); $('.item').unwrap(); 
}); 
</script> 

В моем случае я хотел создать неупорядоченный список, который я контролирую. Но как obvius, вы можете сделать это любым другим способом, изменив HTML в DataList и настроив правильный элемент в jQuery (.item).

Надеюсь, это поможет кому-то, кому нужна функция DataList, и не может сделать это с помощью ретранслятора.

0

Я получал эту ошибку, потому что я использовал <Table> в заголовке и </table> в нижних колонтитулах, я удаляю это, и я использовал целую таблицу на каждом Шаблоне, и она перестает получать эти нежелательные теги.

0

AS это один из лучших результатов на Google для этой проблемы вы можете сделать следующее:

Если вам нужен контроль Datlist вам нужно будет установить свойство RepeatLayout = «Flow»

Anwser был найден здесь: http://forums.asp.net/t/1388759.aspx?Datalist+without+table+