Wie kann ich den ErrorProvider mit einzelnen Zellen im DataGridView-Steuerelement einbinden?Windows Forms - ErrorProvider + DataGridView
Antwort
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.
}
}
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.
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;
}
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.
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:
- 1. Image in Windows Forms DataGridView
- 2. WPF DataGrid Vs Windows Forms DataGridView
- 3. ItemDataBound für ein Windows Forms DataGridView?
- 4. Holen DataRow von bearbeitbaren DataGridView in Windows Forms-Anwendung
- 5. erhalten einzigen Primärschlüssel Wert von Datagridview in C# Windows Forms
- 6. windows forms
- 7. Automatische Größenanpassung der Windows Forms-Steuerelemente
- 8. Drag & Drop mit WPF + Windows Forms
- 9. IPC Windows Service Windows Forms
- 10. Windows Forms: Windows-Label nicht
- 11. ErrorProvider für WPF
- 12. C# WinForms ErrorProvider Steuerelement
- 13. Registerkartenindex in Windows Forms
- 14. SignalR in Windows Forms
- 15. Windows Forms RichTextBox Cursorposition
- 16. Windows Forms: Mehrere Standardschaltflächen?
- 17. Refactoring Windows Forms-Anwendung
- 18. Windows Forms MenuStrip Rahmenfarbe
- 19. Windows Forms Endlosschleife Ausnahme
- 20. Klassenname in Windows Forms
- 21. Windows Forms, Lernprogramm?
- 22. Windows Forms - Berichtsdesigner
- 23. Windows Forms-Anwendungsleistung
- 24. AddMessageFilter ohne Windows Forms?
- 25. Windows Forms Sichtbarkeitsproblem
- 26. DataGridView-Klasse - Errors()
- 27. C# Winforms PropertyGrid und ErrorProvider
- 28. Windows Forms seltsame Steuergröße in verschiedenen Computer
- 29. SharpDX, DirectWrite und Windows Forms
- 30. Windows Forms: Textbox mit Geschichte
Ich habe versucht, die ErrorText-Eigenschaft festzulegen. Während der Laufzeit passiert nichts! –
Das ist seltsam, es sollte funktionieren ... Stellen Sie nur sicher, dass Ihr ErrorText keine leere Zeichenfolge ist, da das den Fehler entfernt. –
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