Windows Forms - ErrorProvider + DataGridView

Сообщение об ошибке в основном говорит о том, что Angular Dependency Injection не может определить, какие объекты хочет этот конструктор (из NetworkService). Таким образом, вы можете удалить параметры из конструктора (если они не нужны), или вам нужно убедиться, что все объекты зарегистрированы в DI.

Ваш единственный конструктор NetworkService имеет несколько параметров, но вы не указываете, как app.module должен их вводить ... поэтому я предполагаю, что один из типов этих параметров неправильный. например нет очевидного ToastController в app.module.

В качестве альтернативы вам может понадобиться конструктор без параметров в NetworkService.

Специально для вашего кода NetworkService ваш конструктор делает больше, чем просто строит объект, я хотел бы просто оставить строку let status... и переместить эту платформу в отдельную функцию init.

8
задан Ksempac 24 June 2009 в 17:46
поделиться

4 ответа

Я не уверен, что вы можете использовать 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.
            }
        }
5
ответ дан 5 December 2019 в 11:27
поделиться

Вы можете добавить столбец (например, DataGridViewTextBoxColumn) в dataGridView.Columns, в котором для CellTemplate установлена ​​ваша собственная реализация (скажем, унаследованная от DataGridViewTextBoxCell). Затем в своей реализации - выполняйте валидацию по своему усмотрению - отрисовку и расположение панели редактирования в соответствии с вашими потребностями.

Образец можно проверить по адресу http://msdn.microsoft.com/en-us/library /aa730881(VS.80).aspx.

Но опять же - может быть более простое решение.

0
ответ дан 5 December 2019 в 11:27
поделиться
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;
}
1
ответ дан 5 December 2019 в 11:27
поделиться

Вы можете просто реализовать IDataErrorInfo в своих BusinessObjects, а также установить BindingSource как DataSource для ErrorProvider. Таким образом, ваша внутренняя проверка BusinessObject будет отображаться в DataGrid и во всех полях, к которым объекты привязаны автоматически.

2
ответ дан 5 December 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: