gpt4 book ai didi

asp.net - 如何使用 ListView 呈现具有多个行跨列的数据表

转载 作者:行者123 更新时间:2023-12-02 17:33:11 24 4
gpt4 key购买 nike

我需要在 html 表中显示数据库中的数据。我当前正在使用 ListView 控件。

我希望最终的 HTML 表呈现如下所示的内容,其中某些行的 rowspan 属性大于 1。原因是有些字段有几行信息,但却对应同一个逻辑条目。

例如:

|---------|---------|----------|----------|
| data | data |data | data |
| | |----------| |
| | |data | |
| | |----------| |
| | |data | |
|---------|---------|----------|----------|
| data | data |data | data |
| | |----------| |
| | |data | |
| | |----------| |
| | |data | |
|---------|---------|----------|----------|
| data | data |data | data |
| | |----------| |
| | |data | |
| | |----------| |
| | |data | |
| | |----------| |
| | |data | |
| | |----------| |
| | |data | |
|---------|---------|----------|----------|

在 ASP.net 中实现此目的最简单的方法是什么?

最佳答案

ListView 的解决方案不太优雅。主要思想是在 ListView 中使用 Repeater 并将除第一条记录之外的所有子数据(我的意思是示例中第三列的数据)绑定(bind)到它。

<asp:ListView runat="server" ID="lstData">
<LayoutTemplate>
<table>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td <%# GetRowspan((int)Eval("Data.Length")) %>>
<%# Eval("FirstName") %>
</td>
<td <%# GetRowspan((int)Eval("Data.Length")) %>>
<%# Eval("LastName") %>
</td>
<td>
<%# GetFirst((IEnumerable<string>)Eval("Data")) %>
</td>
<td <%# GetRowspan((int)Eval("Data.Length")) %>>
<%# Eval("Country") %>
</td>
</tr>
<asp:Repeater runat="server"
DataSource=<%# GetRest((IEnumerable<string>)Eval("Data")) %>>
<ItemTemplate>
<tr>
<td>
<%# Container.DataItem %>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:ListView>

以及背后的代码:

public override void DataBind()
{
var item1 = new { FirstName = "John", LastName = "Doe",
Data = new[] { "first", "second", "third" }, Country = "US" };
var item2 = new { FirstName = "Jane", LastName = "Doe",
Data = new string[] { }, Country = "CA" };
var item3 = new { FirstName = "Joe", LastName = "Public",
Data = new[] { "first", "second", "third", "fourth" }, Country = "US" };

lstData.DataSource = new[] { item1, item2, item3 };
lstData.DataBind();
}

protected string GetRowspan(int length)
{
if (length == 0)
return string.Empty;
else
return string.Format("rowspan='{0}'", length);
}

protected string GetFirst(IEnumerable<string> data)
{
return data.FirstOrDefault();
}

protected IEnumerable<string> GetRest(IEnumerable<string> data)
{
if (data.Any())
return data.Skip(1);
else
return Enumerable.Empty<string>();
}

这会以您想要的格式输出数据。

但是如果不需要使用ListView,您可以看看GridView。有更优雅的方法可以使用它来做到这一点 - ASP.NET GridView RowSpan using RowCreated Event - How to add Table Dynamic RowSpan with GridView文章。

关于asp.net - 如何使用 ListView 呈现具有多个行跨列的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com