ASP.NET是一个可扩展的网格视图?

时间:2009-08-21 21:26:07

标签: c# asp.net javascript gridview

我在互联网上发现了很多不同的例子,但似乎没有什么能像我追求的那样。

我有一个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新手,所以我可能会有一些简单的东西。

由于

2 个答案:

答案 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();

    }
}