2013-06-24 52 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