2009-04-27 18 views

Antwort

5

Ich bin nicht sicher, dass Sie den ErrorProvider auf diese Weise verwenden können, jedoch hat die DataGridView Funktionalität eingebaut, die im Grunde die gleiche Idee ist.

Die Idee ist einfach. Eine DataGridViewCell hat eine ErrorText-Eigenschaft. Sie behandeln das OnCellValidating-Ereignis und wenn die Überprüfung fehlschlägt, legen Sie die Fehlertexteigenschaft fest und Sie erhalten das rote Fehlersymbol, das in der Zelle angezeigt wird. Hier einige Pseudo-Code:

public Form1() 
{ 
    this.dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating); 
} 

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
     { 
      if (!this.Validates(e.FormattedValue)) //run some custom validation on the value in that cell 
      { 
       this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "Error"; 
       e.Cancel = true; //will prevent user from leaving cell, may not be the greatest idea, you can decide that yourself. 
      } 
     } 
+1

Ich habe versucht, die ErrorText-Eigenschaft festzulegen. Während der Laufzeit passiert nichts! –

+0

Das ist seltsam, es sollte funktionieren ... Stellen Sie nur sicher, dass Ihr ErrorText keine leere Zeichenfolge ist, da das den Fehler entfernt. –

+1

Es sollte funktionieren, ich habe es gerade getestet. Das einzige, was mir einfällt, ist, dass das DataGridView selbst eine ShowCellErrors-Eigenschaft hat. Stellen Sie sicher, dass es nicht auf false gesetzt ist. – BFree

0

Sie könnten eine Spalte (wie DataGridViewTextBoxColumn) zu DataGridView.Columns hinzufügen, bei der CellTemplate auf Ihre eigene Implementierung gesetzt ist (z. B. von DataGridViewTextBoxCell geerbt). Dann können Sie in Ihrer Implementierung die Validierung nach Belieben durchführen - das Rendering und die Positionierung des Editors nach Ihren Bedürfnissen.

Sie können eine Probe unter http://msdn.microsoft.com/en-us/library/aa730881(VS.80).aspx überprüfen.

Aber dann wieder - es könnte eine einfachere Lösung geben.

1
private void myGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    var dataGridView = (DataGridView)sender; 
    var cell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
    if (...) // Validation success 
    { 
     cell.ErrorText = string.Empty; 
     return; 
    } 

    dataGridView.EndEdit(); 
    cell.ErrorText = error; 
    e.Cancel = true; 
} 
2

Sie können nur IDataErrorInfo in Ihrem Business implementieren, und stellen Sie die Binding als Datasource für die Errorprovider zu. Auf diese Weise wird Ihre BusinessObject-interne Validierung im DataGrid und in allen Feldern angezeigt, an die die Objekte automatisch gebunden sind.

5

Das Problem, das ich mit BFree Lösung habe, ist, dass nichts auftaucht, während die Zelle im Bearbeitungsmodus ist, aber wenn ich Bearbeitung beende, erhalte ich einen Datenformatfehler (weil mein Wert ein Doppel ist). Ich löste das, indem ich den ErrorProvider direkt an das Zelle-Bearbeitungssteuerelement anfügte, wie folgt: