Как преобразовать DataGridViewCell в элемент управления - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь преобразовать ячейку DataGridView в элемент управления:

Control dat = new Control();
dat = Convert.ChangeType(dataGridView1[colIndex,rowIndex], typeof(Control));

Я получаю значения colIndex и rowIndes из кода индекса.Проблема в том, что я пытался преобразовать много кодов, но это не работает.

Исключение, которое я получаю:

Невозможно неявно преобразовать объект в элемент управления.Существует явное преобразование (вы пропустили приведение?)

Ответы [ 3 ]

5 голосов
/ 21 ноября 2011

Для доступа к элементу управления, размещенному на DataGridViewCell, вы используете свойство EditingControl ячейки , когда ячейка находится в режиме редактирования .

Это свойство возвращает System.Windows.Forms.Control.

Вы также можете получить элемент управления в событии DataGridViewEditingControlShowing - свойство Control DataGridViewEditingControlShowingEventArgs имеет тип System.Windows.Forms.Control.

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
{
    Control c = e.Control;
}

Если вы хотите получить доступ к элементу управления в другое время, то (я полагаю) вам не повезло - я говорю, что в основном это цитата из документов MSDN по DataGridViewEditingControlShowing:

Элемент управления DataGridView размещает по одному элементу редактирования за раз и использует элемент управления редактирования всякий раз, когда тип ячейки не изменяется между изменениями.

1 голос
/ 21 ноября 2011

Свойство Item объекта DataGridView (это то, к чему вы обращаетесь с помощью индексов строк и столбцов) имеет тип DataGridViewCell , которое не наследуется от System.Windows. Forms.Control .

1 голос
/ 21 ноября 2011

Convert.ChangeType не будет работать, если не определено преобразование между объектом и элементом управления, чего, конечно, нет.ChangeType чаще всего используется для примитивных типов, таких как целые числа и числа с плавающей точкой.

Если dataGridView1 [colIndex, rowIndex] является элементом управления, вы должны иметь возможность использовать обычное явное приведение: dat = (Control) dataGridView1[colIndex, rowIndex]

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