2013-06-24 275 views
0

我有一个RadGrid编程生成的列,包括可变数量的列组。每个列组包含四列,其中两列显示,另外两列不显示。显示/隐藏ColumnGroups与混合隐藏和显示列

在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,但这也不起作用。

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

回答

0

当我正在处理一个不相关的问题时,解决方案实际上出现了。

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

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