代码之家  ›  专栏  ›  技术社区  ›  Jak

一个可扩展的网格视图?

  •  3
  • Jak  · 技术社区  · 15 年前

    我在互联网上找到了很多不同的例子,但似乎没有什么能满足我的要求。

    我有一个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
    ------------------------------------------------------
    

    我试着在网格视图中构建网格视图,结果很差。

    我有一个视图,如果不能用JavaScript完成,它会生成公司和摘要信息,这就是我假设可以完成的方式。

    我只是在寻找一个自由的控制或一些聪明的想法,否则我可以完成这一点。对ASP.NET是新的,因此可能缺少一些简单的内容。

    谢谢

    2 回复  |  直到 15 年前
        1
  •  3
  •   Matthew Jones    15 年前

    你可能会有更好的运气 ListView 控制。

    马特·伯塞斯 has a post 使用ListView控件创建此功能。

        2
  •  2
  •   Yuriy Faktorovich    15 年前

    这是一个手风琴的样品,但是你可以用其他的东西:

    Markup:

    <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();
    
        }
    }