我有一个WebHierarchicalDatagrid,我在PageLoad()事件中手动创建列。即使数据源具有与列匹配的数据,我的列也不显示初始页面加载。 (我在创建/添加列到网格后设置并绑定)。如果我刷新(PostBack),那么他们会显示。我已经清除并重置网格很多方面。
如果我在标记中定义列,那么初始页面加载当然是有效的,但我需要根据我的用户角色动态创建列,如果我在页面加载,页面预渲染等中清除并重新创建所需的列,我会得到视图状态错误。
似乎您无法使用标记和代码隐藏来定义网格。这不会是一个问题,但我有一个自定义(用户控制)页面模板在标记中定义,我花了几天时间试图获得在代码隐藏中的创建给定我不能只指向代码隐藏的寻呼机创建使用现有的用户控件。总捕获量 - 22。
Infragistics网格太麻烦了,不能再处理了。如果你保持直线和狭窄,他们很好,但偏离路径你会遇到大麻烦!
答案 0 :(得分:2)
AutoGenerateBands 和 AutoGenerateColumns 应设置为 false 。此外,我不知道您是否使用GridView来配置网格,但我想告诉您 WebHierarchicalDataGrid.Columns 集合与根网带有关系。在设计时或从标记定义的列。至于自动生成的列,可以从 WebHierarchicalDataGrid.GridView.Columns 访问它们。
据我了解,您要从 Page_Load 事件创建列,请尝试在 WHDG_Init 上执行此操作。我只是好奇结果会是什么。
protected void WebHierarchicalDataGrid1_Init(object sender, EventArgs e)
{
WebHierarchicalDataGrid1.DataSource = new TestData().GetData();
WebHierarchicalDataGrid1.DataKeyFields = "ID";
WebHierarchicalDataGrid1.Columns.Add(CreateNewBoundDataField("ID", "ID"));
WebHierarchicalDataGrid1.Columns.Add(CreateNewBoundDataField("Name", "Name"));
WebHierarchicalDataGrid1.Bands.Add(CreateNewBand("ChildBand_0", "Child", "ChildID"));
WebHierarchicalDataGrid1.Bands["ChildBand_0"].Columns.Add(CreateNewBoundDataField("ChildID", "ChildID"));
WebHierarchicalDataGrid1.Bands["ChildBand_0"].Columns.Add(CreateNewBoundDataField("ID", "ID"));
WebHierarchicalDataGrid1.Bands["ChildBand_0"].Columns.Add(CreateNewBoundDataField("Address", "Address"));
WebHierarchicalDataGrid1.Bands["ChildBand_0"].Behaviors.CreateBehavior<Filtering>();
}
public static BoundDataField CreateNewBoundDataField(string columnName, string headerText)
{
BoundDataField boundDataField = new BoundDataField();
boundDataField.DataFieldName = columnName;
boundDataField.Key = columnName;
boundDataField.Header.Text = headerText;
return boundDataField;
}
public static Band CreateNewBand(string key, string dataMember, string dataKeyField)
{
Band band = new Band();
band.AutoGenerateColumns = false;
band.Key = key;
band.DataMember = dataMember;
band.DataKeyFields = dataKeyField;
return band;
}