2

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

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

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

Infragistics 网格太复杂了,无法再处理了。如果你停留在笔直和狭窄的地方,它们很好,但偏离了路径,你就有大麻烦了!

4

1 回答 1

2

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;
}
于 2017-02-08T13:54:02.957 回答