WebHierarchicalDatagrid 在初始页面加载时显示无数据

WebHierarchicalDatagrid Shows No Data on Initial PageLoad

我有一个 WebHierarchicalDatagrid,我在其中手动创建了 PageLoad() 事件中的列。 None 我的列显示在初始页面加载时,即使数据源具有与列匹配的数据。 (我确实在列 created/added 到网格后进行设置和绑定)。如果我刷新 (PostBack),它们就会显示。我已经通过多种方式清除和重置网格。

如果我在标记中定义列,那么初始页面加载当然有效,但我需要根据我的用户角色动态创建列,如果我清除并重新创建我的页面加载、页面预渲染等所需的列我收到一个视图状态错误。

您似乎不能使用标记和代码隐藏来定义网格。不会有问题,但我有一个在标记中定义的自定义(用户控件)寻呼机模板,我花了几天时间试图在代码隐藏中创建它,因为我不能只将代码隐藏寻呼机创建指向使用现有的用户控件。总catch-22。

基础设施网格太棘手了,无法再处理了。如果你走在笔直和狭窄的地方,他们很好,但偏离了道路,你就有大麻烦了!

AutoGenerateBandsAutoGenerateColumns 应设置为 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;
}