Как переопределить datalist для отображения в divs вместо таблицы?

#c# #asp.net

#c# #asp.net

Вопрос:

Я хочу отобразить datalist в divs вместо table, и повторяющиеся столбцы будут исправлены с помощью стиля float в div.

Итак, любой знает метод переопределения для этого.

Спасибо.

Ответ №1:

Я нашел это решение, но опубликовал его, чтобы помочь другим;

Некоторые пользователи предлагают использовать repeater, и это правильно, но в этом случае заменить div вместо table in datalist

 RepeatLayout=RepeatLayout.Flow 
  

Это сделает это span с br помощью .
Но использование Horizontal for RepeatDirection удалит br , но все равно элементы span , отображаемые с.

 RepeatDirection=RepeatDirection.Horizontal 
  

Этот оператор удалит br , но все еще будет отображать элементы span .

Итак, переопределите RenderContents , чтобы создать свой собственный divs outside span и удалить br , если вы не хотите использовать Horizontal RepeatDirection , следующим образом:

 protected override void RenderContents(HtmlTextWriter w)
{
    writer.WriteBeginTag("div");
    writer.WriteAttribute("id", this.ClientID);
    writer.WriteAttribute("class", cssClass);
    writer.Write(HtmlTextWriter.TagRightChar);
    foreach (DataListItem li in this.Items)
    {
        writer.WriteBeginTag("div");
        writer.WriteAttribute("id", li.ClientID);
        writer.WriteAttribute("class", li.CssClass);
        writer.Write(HtmlTextWriter.TagRightChar);
        li.CssClass = null; // clear css not to added in span
        li.RenderControl(w);
        writer.WriteEndTag("div");
    }
    writer.WriteEndTag("div");

}
  

С уважением

Комментарии:

1. я буду, но система здесь должна ждать 2 дня 🙂

2. Я получаю «не найдено подходящего метода для переопределения», если я наследую от System.Web.UI.WebControls. Повторитель

Ответ №2:

Используйте элемент <asp:Repeater> управления вместо элемента <asp:DataList> управления. Внутри <ItemTemplate> <asp:Repeater> вы можете использовать <div> теги для управления макетом, поскольку повторитель не отображает собственный HTML-код, кроме того, что вы ему даете.

Комментарии:

1. Спасибо за ваш ответ, я держу в уме этот ответ, но у меня есть пользовательский контрольный список данных с подкачкой, и некоторые другие параметры затруднят его изменение 🙂

2. На самом деле подкачку не так сложно реализовать с помощью повторителя. Вы можете использовать PagedDataSource для управления данными, а затем самостоятельно отображать разбивку на страницы. Я никогда не мог ничего сделать с элементом управления repeater, который могут делать другие элементы управления.

3. проблема в том, что элемент управления размещается на многих страницах моего проекта 5 лет и настроен для выполнения всех задач, но ваше мнение верно, позвольте мне попробовать и рассказать вам, 🙂 Еще раз спасибо

4. посмотрите на это: RepeatDirection=RepeatDirection . Горизонтальный и RepeatLayout=RepeatLayout . Поток отображает его с помощью span и без br, я пытался переопределить TagKey в Div, но span не изменился, есть идеи по изменению span в div?

5. Спасибо за вашу попытку, и я нашел решение для этого случая, за которым использование repeater является хорошим.

Ответ №3:

Я всегда настраиваю DataList на макет потока, например:

 RepeatLayout="Flow" CssClass="my_repeater_cssclass"
  

Проблема здесь в том, что, как упоминалось выше, .NET по-прежнему предоставляет вам тег br для игры.

Мое решение — просто установить тег br, который генерирует DataList, для отображения: none через класс CSS, применяемый к самому DataList.

 .my_repeater_cssclass br
{
    display : none;   
}
  

Затем, если по какой-то причине у вас есть теги br, которые вы хотите показать, просто дайте вашему тегу br класс css и заставьте его делать то, что вы хотите…как и в моем реальном примере, я закончил тем, что использовал его для очистки с плавающей точкой после каждой строки:

 .my_repeater_cssclass br.clear
{
    display : block;
    clear : both;
}
  

Если вам нужно иметь дело с большим количеством тегов br, то это может быть не вашим решением. Но я нахожу это хорошим простым решением.