2013-07-17 8 views
6

Ho un DataGridView e popolarlo dinamicamente dal mio database tramite il seguente codiceC# Prendi il valore di testo cella se DataError viene attivato

DataGridViewTextBoxColumn colID = new DataGridViewTextBoxColumn(); 
colID.HeaderText = "id"; 
colID.DataPropertyName = "id"; 
colID.ReadOnly = true; 
colID.Visible = false; 
dtgvLoadEx.Columns.Add(colID); 

DataGridViewTextBoxColumn colLoadExpiryDate = new DataGridViewTextBoxColumn(); 
//CalendarColumn colLoadExpiryDate = new CalendarColumn(); 
colLoadExpiryDate.HeaderText = "LoadExpiryDate(mm/dd/yy)"; 
colLoadExpiryDate.Width = 158; 
colLoadExpiryDate.DataPropertyName = "LoadExpiryDate"; 
colLoadExpiryDate.ReadOnly = false; 
colLoadExpiryDate.MaxInputLength = 10; 
dtgvLoadEx.Columns.Add(colLoadExpiryDate); 

dtgvLoadEx.DataSource = data(); //Return data table from my Database 

Come potete vedere ho una colonna di Date. Quando tento di modificare una cella di quella colonna e digito un formato non valido, verrà attivato l'evento DataError.

Ora voglio solo per ottenere il testo di errore da

private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) { 

} 

o qualsiasi altro processo al fine di ottenere il testo di errore.

+0

Come si genera un errore quando si inserisce un testo non valido? – MoonKnight

+2

per esempio inserisco in quella colonna questo "2023123" attiverà l'evento _DataError. Ora voglio solo ottenere che "2023123" – user2530833

+0

Che tipo di eccezione è in e.Exception? – sq33G

risposta

3

Ok ragazzi ho già risolto il problema. Qui lo condividerò

private void dtgvLoadEx_DataError(object sender, DataGridViewDataErrorEventArgs e) 
     { 
      string s = dtgvLoadEx.EditingControl.Text; 
     } 
+0

Grazie a questo lavoro Perfettamente. – user2530833

3

si desidera utilizzare l'argomento evento come segue

string errorText; 
private void dataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) 
{ 
    // This will return the last text entry that was not erroneous. 
    string cellValue = dataGridView[e.ColumnIndex, e.RowIndex].Value.ToString(); 

    // This will get the text indicating the error condition. 
    errorText = dataGridView[e.ColumnIndex, e.RowIndex].ErrorText; 
} 

Modifica. Dopo aver letto il tuo commento qui sotto, se il primo di quanto sopra non restituisce il valore di errore errato, allora potrebbe non essere possibile. Prova a utilizzare ErrorText invece.

Spero che questo aiuti.

+0

Ovviamente dovresti fare qualcosa con la stringa s ... –

+1

Lo provo ma restituisce il valore precedente di datagridview. Non restituisce il valore dell'errore. – user2530833

+0

Vedi la mia modifica per favore. – MoonKnight

1

Si potrebbe fare un evento CellValidating convalida personalizzato utilizzando:

private void dataGridView_CellValidating(object sender, 
DataGridViewCellValidatingEventArgs e) 
{ 
    if (!DateTime.TryParse(e.FormattedValue)) 
    { 
     string s = e.FormattedValue; 
     e.Cancel = true; 
    } 
} 
+0

+1 buona opzione ... – MoonKnight

Problemi correlati