DataGridViewコントロールの個々のセルでErrorProviderをフックできますか?Windowsフォーム - ErrorProvider + DataGridView
答えて
このようにErrorProviderを使用することはできませんが、DataGridViewには基本的に同じ考え方の機能が組み込まれています。
アイデアは簡単です。 DataGridViewCellにはErrorTextプロパティがあります。あなたがすることは、OnCellValidatingイベントを処理し、検証に失敗した場合、エラーテキストプロパティを設定し、その赤いエラーアイコンをセルに表示することです。ここにいくつかの擬似コードは次のとおりです。
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.
}
}
DataGridViewTextBoxColumnのような列を、独自の実装に設定されたCellTemplateを持つdataGridView.Columnsに追加できます(DataGridViewTextBoxCellから継承)。次に、実装の中で - 必要に応じて検証パネルをレンダリングして配置し、必要に応じて検証を行います。
http://msdn.microsoft.com/en-us/library/aa730881(VS.80).aspxでサンプルを確認できます。
しかし、ここでも簡単な解決策があるかもしれません。
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;
}
あなたは自分のBusinessObjectsへIDataErrorInfo
を実装し、あまりにもErrorProviderのためのデータソースとしてのBindingSourceを設定することができます。こうすることで、BusinessObjectの内部の検証がDataGridとすべてのフィールドに表示され、オブジェクトが自動的にバインドされます。
私はBFreeの溶液で持っている問題は、セルが編集モードになっているが、私は編集を終了する場合(私の値は、二重であるため)、私はデータフォーマットエラーを取得している間は何も現れないということです。これを解決するには、次のようにErrorProviderを直接セル編集コントロールに貼り付けてください:
private ErrorProvider ep = new ErrorProvider();
private void DGV_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0)
return;
double val;
Control edit = DGV.EditingControl;
if (edit != null && ! Double.TryParse(e.FormattedValue.ToString(), out val))
{
e.Cancel = true;
ep.SetError(edit, "Numeric value required");
ep.SetIconAlignment(edit, ErrorIconAlignment.MiddleLeft);
ep.SetIconPadding(edit, -20); // icon displays on left side of cell
}
}
private void DGV_CellEndEdt(object sender, DataGridViewCellEventArgs e)
{
ep.Clear();
}
- 1. WindowsフォームのDataGridViewスクロール
- 2. WindowsフォームのRefresh DataGridView
- 3. 実行時にWindowsフォームでErrorProviderを見つける
- 4. ASP.netとlinq-to-sqlのErrorProvider(Windowsフォームから)?
- 5. WPF DataGridとWindowsフォームDataGridView
- 6. Windowsフォームの画像DataGridView
- 7. WindowsフォームのDataGridViewのItemDataBound?
- 8. Windowsフォーム:DataGridViewの余分な列
- 9. WindowsフォームDataGridViewのエンティティモデルからの集計
- 10. DataGridViewからWindowsフォームのテキストファイルへC#
- 11. Windowsフォーム - DataGridView入力の検証
- 12. Errorprovider c#winforms
- 13. WPF用ErrorProvider
- 14. のDataGridView System.IndexOutOfRangeException:フォーム
- 15. 子フォームのDataGridView
- 16. フォームDataGridViewイベント
- 17. WindowsフォームでDataGridViewを動的に更新するには?
- 18. Windowsフォーム:DataGridView RowCountプロパティをラベルにバインドする
- 19. Windowsフォーム:DataGridViewに線や線を描画する方法は?
- 20. DataGridViewのフォームのロード
- 21. カスタマイズのWinForms ErrorProviderコントロールのエントリ
- 22. 別のフォームからフォームのDataGridViewをリフレッシュ
- 23. C#DataGridViewと入力フォーム
- 24. Winforms DataGridView詳細編集フォーム
- 25. Windowsフォーム:MouseWheelのキャプチャ
- 26. C#Windowsフォーム - DataGridViewで重複した値で最初の値のみを表示
- 27. Windowsフォームの結果の変更をSQLデータベースに取り込むDataGridView
- 28. WindowsフォームDataGridViewチェックボックスの値常にチェックする/チェックしないときはTrue
- 29. C#WindowsフォームのDataGridViewでダブルクリック機能を有効にする方法
- 30. DataGridViewがWindowsフォームのフォントを採用するのはなぜですか?
私はErrorTextプロパティを設定しようとしました。実行時に何も起こりません! –
これは奇妙です、それはうまくいくはずです... ErrorTextが空の文字列でないことを確認してください。 –
それは動作するはずです、私はちょうどそれをテストしました。私が考えることができる唯一のことは、DataGridView自体にShowCellErrorsプロパティがあることです。 falseに設定されていないことを確認してください。 – BFree