GridView与ListView对比?

时间:2014-03-21 23:02:29

标签: c# asp.net listview gridview telerik

我在列表中有以下示例数据:

Company-----City-----State-----Salesperson
FakeCo------Test-----FL--------Jim
FakeCo------Test-----FL--------John
FakeCo------Test-----FL--------Sue
Acme--------Foo------CA--------Jane
Oscorp------Bar------NY--------Steve
Oscorp------Bar------NY--------Bob

编辑:此列表中的数据不是静态的,并且会根据查询参数定期更改。

如您所见,有三家公司为每家公司提供冗余数据和多个销售人员。我想做的是获取这些数据并以一种在aspx页面上重复一点点的方式显示它。以下是我想要完成的一个简单示例:

enter image description here

我尝试过使用Telerik的RadGridView和他们的RadListView,但我似乎无法做到正确。我不确定是否需要嵌套控件。我也不确定这些控件中的任何一个是否是实现我的目标的最佳方式,它们只是我想到的第一件事。

我知道这是一个模糊的问题(并且是主观的),但我正在寻找关于显示分组表格数据的最佳方式的意见。示例,链接等也会特别有用!

2 个答案:

答案 0 :(得分:2)

尝试以下步骤。代码是不言自明的

创建两个类

// this is the original class you have
public class CompanyDetails
{
    public string Company { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string SalesPerson { get; set; }
}
//this is to help you with the display
public class GroupedCompanyDetails
{
    public string Address { get; set; }
    public List<string> SalesPerson { get; set; }
}

现在DataBind下面转换后的ListView像这样

List<CompanyDetails> details = GetCompanyDetails();
IEnumerable<GroupedCompanyDetails> groupedDetails = details
    .GroupBy(sp => new { sp.Company, sp.City, sp.State })
    .Select(gsp => new GroupedCompanyDetails()
    {
        Address = String.Format("{0}<br/>{1}, {2}", gsp.Key.Company, gsp.Key.City, gsp.Key.State),
        SalesPerson = gsp.Select(x => x.SalesPerson).ToList()
    });

MasterLS.DataSource = groupedDetails;
MasterLS.DataBind();

支持标记将是

<asp:ListView ID="MasterLS" runat="server">
        <LayoutTemplate>
        <table class="salesmantable">
            <tbody>
                <tr id="itemPlaceholder" runat="server" /> 
            </tbody>
        </table>
        </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td><%# Eval("Address") %></td>
            <td>
                <asp:ListView ID="SalesmanLS" runat="server" 
                            DataSource='<%# Eval("SalesPerson") %>'>
                    <ItemTemplate>
                        <%# Container.DataItem %><hr />
                    </ItemTemplate>
                </asp:ListView>
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>

此外,如果你想在第二个td内的表尝试这个标记,

<asp:ListView ID="SalesmanLS" runat="server" 
            DataSource='<%# Eval("SalesPerson") %>'>
    <LayoutTemplate>
        <table class="salesmanchildtable">
            <tbody>
                <tr id="itemPlaceholder" runat="server" /> 
            </tbody>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr><td><%# Container.DataItem %></td></tr>
    </ItemTemplate>
</asp:ListView>

免责声明:我的ListView有点生疏。 Dunno,如果有更好的方法。现在太过MVC了;)

答案 1 :(得分:1)

您对所提供的数据所谓的非标准化数据(返回数据库理论),因此基本上有一个主 - 细节关系,如果它被标准化,将在2个不同的表中,如:< / p>

ID   Company-----City-----State
1----FakeCo------Test-----FL
2----Acme--------Foo------CA
3----Oscorp------Bar------NY

Salesperson----Company ID
Jim------------1
John-----------1
Sue------------1
Jane-----------2
Steve----------3
Bob------------3

考虑到这一点,有几种方法可以根据需要显示数据,使用单个数据源(如您所拥有)或将其拆分为2个与主 - 细节关系相关的不同数据源。所以你需要寻找的是asp.net上的master-detail布局。

不一定要考虑使用单一控制方法来实现这一点,即使大多数第三方的数据绑定控件都提供了这种数据布局,例如你提到的那个,Telerik的RadGridView,这里是一些样本他们有这种布局:

http://demos.telerik.com/aspnet-ajax/grid/examples/functionality/grouping/grouping/defaultcs.aspx

http://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/master-detail/defaultcs.aspx

但是,您也可以使用内置的ASP .NET控件实现此目的,并记住您始终可以使用嵌套数据控件,如:http://elpolloprogrammer.com/index.php/master-detail-gridview-in-asp-net-c/