将平面数据源绑定到手风琴

时间:2013-04-10 17:43:28

标签: .net ajax

我有一个OLAP多维数据集,我想绑定到手风琴。

我获取数据的步骤是通过存储过程,最终作为.net中的平坦数据表;它看起来像这样:

dimension1, meaure1, measure2, measure3
---------------------------------------------------
header1, 1, 2, 3
header1, 2, 3, 4
header1, 3, 4, 5
header2, 4, 5, 6
header2, 6, 7, 8
header3, 7, 8, 9
 ... etc.

In the accordion, I would like it to be displayed as such:
header1
1,2,3
2,3,4
3,4,5
header2
4,5,6
6,7,8
header3
7,8,9

在ItemDataBound事件中,我想创建一个标签头,然后将每个度量添加到数据网格,就像John在这里做的那样:http://www.dotnetjohn.com/articles.aspx?articleid=283

问题是,对于数据表中的每个项目,.net想要创建一个新的accordionPane,并且每个记录都会触发两次事件(一次作为标题,一次作为项目)。我想使用数据绑定方法因为我认为维护它会更容易(因为我需要事件连接)。

我无法取消itemdatabound事件。此外,accordion.datasource属性只接受数据视图,因此我无法传入数据集并对其进行操作。

我的假设是数据绑定不是正确的路径。

我感谢任何人在尝试解决此问题时的任何见解。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我没有使用手风琴,但以下适用于嵌套网格和中继器,也许你可以适应。

public class DataItem
{
    public string Header { get; set; }
    public string Measure1 { get; set; }
    public string Measure2 { get; set; }
    public string Measure3 { get; set; }
}

在你的手风琴数据绑定方法中:

DataItem[] dataList = GetData();

IEnumerable<IGrouping<string, DataItem>> groupedList = dataList.GroupBy(x => x.Header);

AccordionControl.DataSource = groupedList;
AccordionControl.DataBind();

然后在Accordion的ItemDataBound事件中:

var group = (IGrouping<string, DataItem>)e.Item;

HeaderLabel.Text = group.Key;

GridControl.DataSource = group;
GridControl.DataBind();