Установите значение DataGridTextBoxCell в DataGridView - PullRequest
0 голосов
/ 03 мая 2011

Я пытаюсь защитить пользователей от сообщения об ошибке, проверив, ввел ли пользователь больше, чем максимально допустимый размер, в мой DataGridViewCell.

Я делаю:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1)
    {
        string selected = (dataGridView3[e.RowIndex, 1] as DataGridViewTextBoxCell).FormattedValue.ToString();
        if (selected.Length > 50)
        {
            dataGridView3[e.RowIndex, 1].Value = selected.Take(50).ToString();
        }
    }
}

выбран мойтекст, но у меня появляется сообщение об ошибке при обновлении: не могу преобразовать строку в int32 ... и если я использую = 0, это просто не имеет смысла.Что здесь не так?

Когда я обновляю texbox с длиной> 50, происходит ошибка, она говорит, что мое значение не целое.Но это должна быть строка.Я только что прочитал строку из той же ячейки.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Вы неправильно размещаете строки и столбцы в

dataGridView3[e.RowIndex, 1]

, это должен быть сначала столбец, затем строка:

dataGridView3[1, e.RowIndex]

Кроме того, нужно ли выполнять приведение к DataGridViewTextBoxCell?Это работает для меня:

string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();

И мое предположение: зачем использовать его в CellEndEdit, а не в событии CellValidating?Затем можно упростить до:

e.FormattedValue.ToString()

Редактировать Проверка ячейки запускается чаще, чем EndEdit: даже при изменении выбора ячейки.Если для вас это не совсем нормально, лучше оставайтесь с CellEndEdit, как и вы.И, как уже упоминалось, убедитесь, что источник данных содержит строку, а не целое число.Кстати: в моем VS нет функции Take (), я заменил ее на Substring (), попробуйте так:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1)
    {
        string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();

        if (selected.Length > 50)
        {
            dataGridView1[3, e.RowIndex].Value = selected.Substring(0, 50);
        }
    }
}
0 голосов
/ 03 мая 2011

Вы должны привести строку к правильному целочисленному значению.Вы пытаетесь установить целочисленное значение со строкой, и оно не может выполнить преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...