我有一个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属性只接受数据视图,因此我无法传入数据集并对其进行操作。
我的假设是数据绑定不是正确的路径。
我感谢任何人在尝试解决此问题时的任何见解。
提前致谢。
答案 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();