#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, то это может быть не вашим решением. Но я нахожу это хорошим простым решением.