2016-06-20 3 views
-1

이것이 가능합니까? 내가 현재하고있는 일은 색상을 변경하기 위해 각 행을 반복하는 것입니다. 그러나 이는 또한 쿼리를 실행하고 색상을 변경 한 결과에 따라 매우 느립니다. 여기에 예를의특정 값을 포함하는 모든 datagridview 행의 색상을 변경하십시오.

Part No | Other Columns 
----------------------- 
Part A | 123456 
Part B | 123456 
Part C | 123456 
Part A | 123456 
Part A | 123456 

난 그냥 같은 쿼리 3 회를 실행하는 것입니다 내 현재의 방법 Where Part_No = 'Part A' 내 쿼리. 내가하고 싶은 일은 첫 번째 열에 고유 한 값을 가져 와서 쿼리의 값을 확인하고 그 값을 포함하는 행의 색을 변경하는 것입니다.

+0

dgv는 DataTable과 같은 것입니까? WHERE 절이 Part_No = 'Part A'' 인 경우 Part B와 C는 무엇을하고 있습니까? – Plutonix

+0

@Plutonix 죄송합니다, 분명치 않다. 예, datagridview는 데이터 소스에 바인딩됩니다. 내가 언급 한 where 절은 각 행을 반복 할 때 쿼리에 사용됩니다. – crimson589

답변

0

여기에 대답 How to change row color in datagridview?

===

난 그냥이 문제를 조사했다 (그래서이 질문은 거의 삼년 전에 출판되었다 ​​알고,하지만 어쩌면 도움이 될 사람 ...)하지만, 더 나은 옵션은 RowPrePaint 이벤트 내에 코드를 배치하여 모든 행을 탐색 할 필요가 없으며 그리기 만하는 것이므로 많은 양의 데이터를 훨씬 더 잘 수행 할 수 있습니다. 이벤트에 첨부하십시오.

this.dataGridView1.RowPrePaint 
    += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(
     this.dataGridView1_RowPrePaint); 
The event code 

private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) 
{ 
    if (Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[7].Text) < Convert.ToInt32(dataGridView1.Rows[e.RowIndex]..Cells[10].Text)) 
    { 
     dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Beige; 
    } 
} 
0

경제적 인 방법은 CellFormatting 이벤트를 사용하는 것입니다. 이 셀이 처음으로 표시되면 실행됩니다. 보이는 행에 대해서만 실행되므로 더 빨라야합니다.

Then I loop through the grid view to do something like update the data of all colored rows

데이터를 DB에서 오는 경우

는 데이터 소스와 같은 데이터에 작용되어야한다 (영업 쿼리를 언급). DGV는 사용자의 데이터보기입니다. 특정 색상의 행에 대해 조치를 취하는 대신 파트 번호 나 색상을 결정하는 요소에 대해 조치를 취하십시오. 또한이 번호 또는 부품 번호가있는 레코드 뷰를 작성하고 프로세스/프로세스를 단순화 할 수 있습니다. 데이터를 변경할 수 있기 때문에

, 당신은이 이벤트를 처리 할 수 ​​있습니다 : CellFormatting

Private Sub dgv1_CellFormatting(...) Handles dgv1.CellFormatting 
    ' default start up color 
    If e.ColumnIndex = 3 Then 
     e.FormattingApplied = ColorMyRow(e.RowIndex, e.ColumnIndex) 
    Else 
     e.FormattingApplied = False 
    End If 
End Sub 

Private Sub dgv1_CellValueChanged(...) Handles dgv1.CellValueChanged 
    ' if the target cell changes, update 
    If e.ColumnIndex = 3 Then 
     ColorMyRow(e.ColumnIndex, e.RowIndex) 
    End If 
End Sub 

' DRY 
Private Function ColorMyRow(rowIndex As Int32, colIndex As Int32) As Boolean 
    Dim bass As Color = Color.PeachPuff 
    Dim pike As Color = Color.SeaShell 
    Dim salmon As Color = Color.Salmon 

    Select Case dgv1.Rows(rowIndex).Cells(colIndex).Value.ToString 
     Case "Bass" 
      dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = bass 
      Return True 
     Case "Pike" 
      dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = pike 
      Return True 
     Case "Salmon" 
      dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = salmon 
      Return True 
    End Select 

    Return False 
End Function 
색상은) 사용자가 셀을 편집 여부를 업데이트됩니다

CellValueChanged, B)는 셀 값을 변경 (dgv1.Rows(0).Cells(3).Value = "Mermaid") 또는 c) 데이터 소스 (dtParts.Rows(0)(3) = "Pike")를 변경합니다.

Dim bassRows = dtSample.Select("Fish = 'Bass'") 
For Each dr As DataRow In bassRows 
    dr("Fish") = "Pike" 
Next 

색상이 자동적으로 변경됩니다 마지막으로

,보다는 파란색 행에 루프를 시도, 당신은 DataTable,이 경우, DataSource을 조회 할 수 있습니다.

+0

늦게 회신 해 주셔서 죄송합니다.이 문제를 해결하려고 애를 쓰지는 않았지만 표시되는 행의 색상 만 언급 했으므로 DataGridview를 통해 반복하면 어떻게 작동하며 행의 색상에 따라 달라집니다. – crimson589

+0

아무 것도 할 필요가 없습니다. 모든 행을 통해 루핑 - 표시되지 않는 (또는 표시되지 않을 수도있는) 행은 느리게 진행됩니다. 각 행이보기로 스크롤 될 때 이벤트가 시작되고 후면 색이 설정됩니다. 당신이하는 일은 색에 의존해서는 안되지 만, 색을 설정하는 데 사용 된 것과 같은 결정 요소를 사용해야합니다. – Plutonix

+0

색상을 설정 한 후 반복한다는 의미입니다. 귀하의 방법을 사용한다고 가정 해 보겠습니다. 일부 표시 행은 현재 색상이 지정되어 있습니다. 그런 다음 격자보기를 반복하여 모든 색이 지정된 행의 데이터를 업데이트하는 것처럼 행을 볼 수는 없지만 색을 업데이트한다고 가정합니다. – crimson589

관련 문제