none
請問如何讓DataGridView中產生NoNullAllowedException的cell獲得focus? RRS feed

  • 問題

  • 之前謝謝大家幫忙,解決了處理DataError事件的exception問題,從那個問題之中,小弟衍生了新的問題,不知道要如何才能讓DataGridView中產生NoNullAllowedException的cell獲得focus?

     

    而且小弟注意到,雖然我使用了e->Cancel = true的敘述,保留了產生錯誤前cell的資料,不過在產生錯誤後,小弟在handle DataError時已經設定過了該cell為正確的值,但是卻發現顯示出來的值和之前我設定的值卻不一樣,是我之前輸入的錯誤的值。不知道有沒有人也遇過一樣的問題呢?

     

    也就是說,我寫了類似下面的code:

    Code Snippet

    private: System::Void rxdrugitemdbDataGridView_DataError(System::Object^  sender, System::Windows::Forms::DataGridViewDataErrorEventArgs^  e) {
        if( Type::GetType( "e->Exception" ) == Type::GetType("System::Data::NoNullAllowedException") )
         e->Cancel = true;
        this->rxdrugitemdbDataGridView->Rows[e->RowIndex]->Cells[2]->Value = sDrugCodeBySearchFrm;
       }

     

     

    但是那個cell顯示出來的並不是我想要的值sDrugCodeBySearchFrm,而是我之前隨便輸入的值。

     

    這個問題不太好描述,希望大家能夠看得懂我想表達的意思><|||

    2008年5月4日 下午 12:42

解答

  • HI,

     

    您可以這樣寫:

     

    Private Sub DataGridView1_DataError(ByVal sender As System.Object, ByVal e As  

                                System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
            If TypeOf (e.Exception) Is Data.NoNullAllowedException Then
                Dim view As DataGridView = CType(sender, DataGridView)
                view.Rows(e.RowIndex).ErrorText = "an error"

                For i As Integer = 0 To DataGridView1.Rows(e.RowIndex).Cells.Count - 1
                    If DataGridView1.Rows(e.RowIndex).Cells(i).Value.GetType().FullName = "System.DBNull" Then
                       
    DataGridView1.CurrentCell = DataGridView1.Rows(e.RowIndex).Cells(i)

                    End If
                Next

                e.Cancel = True
            End If
        End Sub

     

    tihs

    2008年5月5日 上午 06:26