如何覆盖Datalist被渲染成Div而不是表?

时间:2011-10-04 11:39:20

标签: c# asp.net

我想将datalist渲染为div而不是table,重复列将由div上的float样式修复。

所以任何人都知道覆盖渲染方法来做到这一点。

感谢。

3 个答案:

答案 0 :(得分:10)

我找到了这个解决方案,但我发布了它以帮助其他人;

有些用户建议使用转发器,这是正确的,但在div

中替换table而不是datalist
RepeatLayout=RepeatLayout.Flow 

这将使spanbr成为一致。 但是Horizontal使用RepeatDirection会删除br但仍使用span呈现的项目。

RepeatDirection=RepeatDirection.Horizontal 

此语句将移除br,但仍会移除使用span呈现的项目。

如果您不想使用RenderContents,请覆盖divsspan之外创建自己的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)

使用<asp:Repeater>控件而不是<asp:DataList>控件。 在<ItemTemplate>的{​​{1}}范围内,您可以使用<asp:Repeater>标签来控制布局,因为转发器除了您提供的内容之外不会呈现任何自己的html。

答案 2 :(得分:1)

我总是将DataList设置为Flow布局,如:

RepeatLayout="Flow" CssClass="my_repeater_cssclass"

这里的问题是,如上所述,.NET仍然会为您提供 br 标记。

我的解决方案是设置DataList生成的br标签:none通过应用于DataList本身的CSS类。

.my_repeater_cssclass br
{
    display : none;   
}

然后,如果由于某种原因你有br标签你想要显示,只需给你的br标签一个css类并让它做你想要的...就像我的实际例子我最终用它来清除每一行后都有一个浮点数:

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

如果你有很多的br标签需要处理,那么这可能不是你的解决方案。但我觉得这很简单。