Как я могу подключить ErrorProvider с отдельными ячейками в элементе управления DataGridView?Windows Forms - 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) в dataGridView.Columns, который установил CellTemplate в вашу собственную реализацию (скажем, унаследованную от 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;
}
Вы можете просто реализовать IDataErrorInfo
в ваши BusinessObjects, и установите BindingSource в качестве DataSource для ErrorProvider тоже. Таким образом, ваша проверка BusinessObject intern появляется в 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. Validation DataGridView Windows Forms
- 2. Unsort Windows Forms DataGridView
- 3. Windows Forms DataGridView DataSource
- 4. Windows Forms - проверка ввода DataGridView
- 5. Windows Forms: DataGridView Binding Question
- 6. ItemDataBound для Windows Forms DataGridView?
- 7. Экран Windows Forms/DatagridView мерцает
- 8. Аккордеон в Windows Forms DataGridView
- 9. Изображение в Windows Forms DataGridView
- 10. ErrorProvider (из Windows Forms) для ASP.net и linq-to-sql?
- 11. Связывание коллекций с DataGridView в Windows Forms
- 12. C# Windows Forms ping.SendAync проблемы с DataGridView
- 13. Windows Forms: индикатор выполнения в столбце DataGridView
- 14. Host TreeView в ячейках Windows Forms DataGridView
- 15. datagridview в C# windows forms application
- 16. Асинхронно заполняет datagridview в приложении Windows Forms
- 17. WPF DataGrid Vs Windows Forms DataGridView
- 18. DataGridView - рисунок прямоугольник на проблемные DataGridView C# Windows Forms
- 19. C# Forms, DataTable, DataGridView
- 20. WPF Forms DataGridView ContextMenu
- 21. Forms DataGridView Events
- 22. Проверка с помощью errorProvider с помощью раскрывающегося списка в Windows Forms?
- 23. Заполнение базы данных SQL в результате изменений Windows Forms DataGridView
- 24. Динамическое добавление ComboBox/текстовое поле в DataGridView Windows Forms C#
- 25. Получить DataRow из редактируемого DataGridView в приложении Windows Forms
- 26. Увеличьте высоту заголовка столбца в DataGrid Windows Forms (Not DataGridView)
- 27. Как отменить/отменить сортировку в Windows Forms DataGridView
- 28. Захват события checkbox click в Windows Forms DataGridview
- 29. Копировать Datagridview в буфер обмена в Windows Forms
- 30. Windows Forms DataGridView не может вводить данные в последней строке
Я попытался установить свойство ErrorText. Во время выполнения ничего не происходит! –
Странно, это должно сработать ... Просто убедитесь, что ваш ErrorText не является пустой строкой, потому что это устраняет ошибку. –
Он должен работать, я только что протестировал его. Единственное, о чем я могу думать, это то, что сам DataGridView обладает свойством ShowCellErrors. Убедитесь, что он не установлен в значение false. – BFree