0

我有一个带有以编程方式生成的列的 RadGrid,包括可变数量的列组。每个列组包含四列,两列显示,两列不显示。

在 RadGrid 上方,我有一系列复选框,每个列组一个。目标是让用户根据他们希望看到的列来选中或取消选中这些框。目前,当复选框的选中值通过使用更改时,我正在设置列的显示属性radgrid.Columns.FindByUniqueName("columnName").Display。但是,不能以这种方式访问​​列组本身。实际上,列组在其所有子列消失时消失,但在显示其子列时它们不会重新出现,从而导致标题错位。

相关代码:

'Defining the grid
Dim radgrid As RadGrid
radgrid = New RadGrid()

Dim i as Integer = 0
For Each r As DataRow In subTable.Rows
    Dim colGroup As GridColumnGroup = New GridGroupColumn()
    radgrid.MasterTableView.ColumnGroups.Add(colGroup)
    colGroup.HeaderText = r.Item("Name")
    colGroup.Name = "colGroup" & i

    Dim colID As GridBoundColumn = New GridBoundColumn()
    radgrid.MasterTableView.Columns.Add(colID)
    colID.ColumnGroupName = "colGroup" & i
    colID.DataField = "id" & i
    colID.HeaderText = "ID"
    colID.UniqueName = "id" & i
    colID.Display = False

    Dim colScore As GridBoundColumn = New GridBoundColumn()
    radgrid.MasterTableView.Columns.Add(colScore)
    colScore.ColumnGroupName = "colGroup" & i
    colScore.DataField = "score" & i
    colScore.HeaderText = "Score"
    colScore.UniqueName = "score" & i

    i += 1
Next

'Checkbox CheckedChanged sub
If selectedButton.Checked = True Then
    radgrid.Columns.FindByUniqueName("colScore" & selectedButton.Value.ToString()).Display = True
Else
    radgrid.Columns.FindByUniqueName("colScore" & selectedButton.Value.ToString()).Display = False
End If

理想情况下,我想做类似的事情,radgrid.MasterTableView.ColumnGroups.FindGroupByName("colGroup" & selectedButton.Value.ToString()).Display = False但没有Display属性,并且该Visible属性是只读的。我也尝试ColumnGroupName在将它们设置为显示后重新设置列,但这也不起作用。

我猜我有隐藏的列是什么让这比它应该的更复杂,但是有没有办法让它与隐藏的列一起工作?

4

1 回答 1

1

当我处理一个无关紧要的问题时,解决方案实际上出现了。

radgrid.Rebind()在更改属性值后调用Display会导致组列标题消失并根据需要重新出现。

Protected Sub button_CheckChanged()
    If selectedButton.Checked = True Then
        radgrid.Columns.FindByUniqueName("colScore" & selectedButton.Value.ToString()).Display = True
    Else
        radgrid.Columns.FindByUniqueName("colScore" & selectedButton.Value.ToString()).Display = False
    End If
    radgrid.Rebind()
End Sub
于 2013-06-24T23:28:36.980 回答