我在互联网上发现了很多不同的例子,但似乎没有什么能像我追求的那样。
我有一个DB视图,可以生成如下内容:
--------------------------------------------------- Company | Code | Total | Available | Used | Needed --------------------------------------------------- One | 1 | 10 | 8 | 2 | 3 One | 2 | 5 | 5 | 0 | 5 Two | 1 | 5 | 2 | 3 | 0 Two | 2 | 8 | 4 | 4 | 9 Two | 3 | 0 | 0 | 0 | 0 ---------------------------------------------------
但我真的想要总结公司的所有行,并能够根据需要进行扩展以查看详细信息。
类似于:
------------------------------------------------------ Company | Total | Available | Used | Needed ------------------------------------------------------ [+] One | 15 | 13 | 2 | 8 ------------------------------------------------------ [-] Two Code | 13 | 6 | 7 | 9 ------------------------------------------------------ | 1 | 5 | 2 | 3 | 0 | 2 | 8 | 4 | 4 | 9 | 3 | 0 | 0 | 0 | 0 ------------------------------------------------------
我尝试在gridview中构建一个gridview,结果不佳。
我有一个视图可以生成公司和摘要信息,如果不能用JavaScript完成,我认为可以这样做。
我只是在寻找一个自由控制或一些明智的想法,否则我将如何做到这一点。 ASP.NET新手,所以我可能会有一些简单的东西。
由于
答案 0 :(得分:3)
ListView控件可能会更好运。
Matt Berseth has a post使用ListView控件创建此功能。
答案 1 :(得分:2)
以下是带有Accordion的示例,但您可以使用其他内容:
标记:
<ajax:Accordion ID="Accordion1" runat="Server"
SelectedIndex="0"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
AutoSize="None" FadeTransitions="true"
TransitionDuration="250" FramesPerSecond="40"
RequireOpenedPane="false" SuppressHeaderPostbacks="true">
<HeaderTemplate><%# Eval("Key")%></HeaderTemplate>
<ContentTemplate>
<asp:ListView runat="server" ID="MyListView" DataSource='<%# Eval("Values") %>'>
<LayoutTemplate>
<table style="width:75%">
<tr>
<th>Code</th>
<th>Total</th>
</tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("Code")%></td>
<td><%# Eval("Total")%></td>
</tr>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</ajax:Accordion>
代码隐藏:
public class Company
{
public string CompanyName;
public int Code, Total;
public Company(string company, int code, int total)
{
this.CompanyName = company; this.Code = code;
this.Total = total;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var Companies = new Company[] {
new Company("One", 1, 10),
new Company("Two", 1, 5),
new Company("Two", 2, 8)
};
Accordion1.DataSource = Companies
.GroupBy(c => c.CompanyName, c => new { Code = c.Code, Total = c.Total },
(k, enumerable) => new { Key = k, Values = enumerable });
Accordion1.DataBind();
}
}