2016-06-07 76 views
1

首先:30%無關緊要。這是一個設計問題。我們也可以說前3個顯示列。首先在DataGridView中顯示30%的列

在我的DataGridView我使用BackgroundColorsRows來傳遞用戶的一些信息。

爲了讓用戶在選擇行的同時可以看到此信息,前30%的列應與Back/ForeColor獲得相同的SelectionBack/ForeColor

到目前爲止從未被使用

  • .cells(0).Style.SelectionBackColor = .cells(0).Style.Backcolor
  • (等)的問題。

現在,我補充說,允許用戶重新排序,這使得下面的語句成爲真正的欄功能:

  • ColumnIndex != DisplayedIndex

該聲明爲真使得SelectionBackColor-Changed單元格在行中混合而不在第一列中。它仍然在做這項工作,但看起來很糟糕。

是否有像「DisplayedColumns」集合的順序的.DisplayedIndex值,我可以用它來調用第一個DisplayedColumns?如果沒有,我怎麼能有效地創造一個我自己的?


編輯:

用戶也可以隱藏特定的列,不爲他無所謂。因此,我們必須要注意的Column.DisplayedIndexColumn.Visble


得到它用下面的代碼工作:

Try 
' calculate what is thirty percent 
Dim colcount As Integer = oDic_TabToGridview(TabPage).DisplayedColumnCount(False) 
Dim thirtyPercent As Integer = ((colcount/100) * 30) 
' Recolor the first 30 % of the Columns 
Dim i As Integer = 0 
Dim lastCol As DataGridViewColumn = oDic_TabToGridview(TabPage).Columns.GetFirstColumn(DataGridViewElementStates.Visible) 
While i < thirtyPercent 
    .Cells(lastCol.Index).Style.SelectionBackColor = oCol(row.Item("Color_ID") - 1) 
    .Cells(lastCol.Index).Style.SelectionForeColor = Color.Black 
    lastCol = oDic_TabToGridview(TabPage).Columns.GetNextColumn(lastCol, DataGridViewElementStates.Visible, DataGridViewElementStates.None) 
    i += 1 
End While 
Catch ex As Exception 
    MsgBox(ex.Message & vbNewLine & ex.StackTrace) 
End Try 

回答

1

讓我們先假定你是着色你行不知何故類似方式如下:

Me.dataGridView1.Rows(0).DefaultCellStyle.BackColor = Color.PowderBlue 
Me.dataGridView1.Rows(1).DefaultCellStyle.BackColor = Color.Pink 
' ...etc. 

DataGridView.CellPainting事件處理程序中,您可以確定繪畫單元格是否屬於第一個通過使用DataGridViewColumnCollection.GetFirstColumnDataGridViewColumnCollection.GetNextColumn方法得到3210列。

如果單元格屬於一個這些列,請將單元格的SelectionBackColor設置爲單元格的BackColor。否則,將其設置爲默認突出顯示顏色。

Dim column As DataGridViewColumn = Me.dataGridView1.Columns.GetFirstColumn(DataGridViewElementStates.Visible) 
e.CellStyle.SelectionBackColor = Color.FromName("Highlight") 

' Example: Loop for the first N displayed columns, where here N = 2. 
While column.DisplayIndex < 2 
    If column.Index = e.ColumnIndex Then 
     e.CellStyle.SelectionBackColor = e.CellStyle.BackColor 
     Exit While 
    End If 

    column = Me.dataGridView1.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None) 
End While 

Example GIF reording columns but first 2 remain row colored

補充說明:您可能需要考慮改變對這些細胞的ForeColor的可讀性 - 這取決於你行的BackColor選擇。同樣,如果只從第一個列中選擇一個單元格,則很難注意到這一點。

+0

幾乎是最好的答案我曾經在這個平臺上!幫助我的關鍵字是'DataGridView.Columns.GetNextColumn(...)'。我不知道這個功能,但我相信這對未來的項目非常有幫助。謝謝! – Luke

+0

很高興幫助!我發現研究很有趣。 – OhBeWise