2009-09-16 88 views
1

在VB中的.Net 3.5,是有可能的DataGridViewCell的(未綁定)的顏色改變爲不同的顏色和具有細胞失去焦點或離開細胞之前發生明顯變化?我有一個計時器,正在運行與數據存在的查詢,我希望顏色立即改變,而不是在用戶離開單元格後。DataGridViewCell的背景顏色更改,恕不失去焦點

我試過DataGridView.Refresh和Me.Refresh,並沒有得到結果。

我在做什麼錯? (下面是我用它來改變背景的代碼)

''' <summary> 
''' Sets or clears the passed cells background to Red 
''' </summary> 
''' <param name="ColumnNumber">Datagridview column index of the cell to be changed</param> 
''' <param name="RowNumber">Datagridview row index of the cell to be changed</param> 
''' <param name="Error">Indicate whether the cell should be red, <c>True</c>, or empty, <c>False</c></param> 
Private Sub Error_Cell(ByVal ColumnNumber As Integer, ByVal RowNumber As Integer, ByVal [Error] As Boolean) 
    If [Error] Then 
     Me.dgvMain.Rows(RowNumber).Cells(ColumnNumber).Style.BackColor = Color.Red 
    Else 
     Me.dgvMain.Rows(RowNumber).Cells(ColumnNumber).Style.BackColor = Color.Empty 
    End If 
    Me.dgvMain.Refresh() 
    Me.Refresh() 
End Sub 

回答

0

我決定只有當前單元格背景顏色需要更改並開始使用DataGridViewCell的EditControl。

爲了捕捉這一點,我不得不搶EditControl(類型DataGridViewTextBoxEditingContorl)上的DataGridView事件「EditControlShowing」與細胞相關聯EditControl與當地的表單變量,然後添加一個處理程序的TextChagned事件(因爲細胞直到編輯完成後纔出現TextChanged)。 (第一程序)。

這樣做後,我可以通過更改立即更改的EditControls BackColor來更改單元格的顏色。 (第二程序)

我必須在DataGridViews CellEndEdit事件上釋放EditControl以便重新使用我的私有變量。 (第三程序)

由於使用情況的變化,我還沒有測試嘗試更改該行,但它似乎工作得很好。我希望這可以幫助任何有類似問題的人。如果有更有效的方法做到這一點,請讓我知道!

Private EditingControl As DataGridViewTextBoxEditingControl 

Private Sub dgvMain_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvMain.EditingControlShowing 
    If TypeOf (e.Control) Is DataGridViewTextBoxEditingControl Then 
     EditingControl = DirectCast(e.Control, DataGridViewTextBoxEditingControl) 
     If DirectCast(e.Control, DataGridViewTextBoxEditingControl).EditingControlDataGridView.CurrentCell.OwningColumn Is PartNumber Then 
      AddHandler EditingControl.TextChanged, AddressOf EditingControl_TextChanged 
     End If 
    End If 
End Sub 

Private Sub Error_Cell(ByVal [Error] As Boolean) 
    If [Error] Then 
     If EditingControl IsNot Nothing Then EditingControl.BackColor = Color.Red 
    Else 
     If EditingControl IsNot Nothing Then EditingControl.BackColor = Color.Empty 
    End If 
    Me.dgvMain.Refresh() 
End Sub 



Private Sub dgvMain_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvMain.CellEndEdit 
    If EditingControl IsNot Nothing Then 
     RemoveHandler EditingControl.TextChanged, AddressOf EditingControl_TextChanged 
    End If 

    EditingControl = Nothing 

End Sub 

注:很多,我有如果/那麼的已被刪除,以保護無辜的,否則,他們將在可能的情況是內聯內的步驟。

0

首先,你必須解釋自己當行會與diferent顏色在我的情況下,可以畫,例如(當用戶點擊一個CheckBoxCell) 然後嘗試使用像CellLeave或CellContentClick這樣的不同事件(如我的示例): 最後,玩代碼!

void updateCellStyle_DataGridViewCellEventArgs(object sender, DataGridViewCellEventArgs e){ 
int index = e.RowIndex; 
if (index == -1) 
return; 
else { 
DataGridView dgv = sender as DataGridView; 
int vCHK = e.ColumnIndex; //this is the checkbox column 
if (vCHK != 0) 
return; 
else { 
DataGridViewCheckBoxCell temp = (DataGridViewCheckBoxCell)dgv.Rows[index].Cells[0]; 
if ((bool)temp.EditedFormattedValue == true) { 
DataGridViewTextBoxCell xrow = (DataGridViewTextBoxCell)dgv.Rows[index].Cells[3]; 
xrow.OwningRow.DefaultCellStyle.BackColor = Color.Wheat; 
/* 
other operations 
*/ 
} 
else { 
temp.OwningRow.DefaultCellStyle.BackColor = Color.White; 
/* 
other operations 
*/ 
} 
+0

當用戶輸入無效的零件號碼時,我正在爲該行塗上不同的顏色。在他們轉向其他任何事情之前,細胞應該改變顏色,告訴他們他們沒有使用正確的部分。 我一直在玩這個幾天,所以我想我會問你們。 – Stevoni