Как переключиться между DataGridViewTextBoxCell и DataGridViewComboBoxCell?

Абсолют должен быть этот книга Rubini. (доступный оба как бумажная копия или бесплатная электронная копия)

Он дает реализации нескольких фиктивных драйверов, которые не требуют, чтобы у Вас были любые аппаратные средства кроме Вашего ПК. Таким образом для начала работы в разработке ядра это - самый легкий способ пойти.

Что касается выполнения встроенной работы я рекомендовал бы покупать один из многочисленных SBC (одноплатные компьютеры), которые являются там. Существуют много они, которые основаны на x86 процессорах, обычно с интерфейсами ПК/104 (электрически, ПК/104 идентичен стандарту шины ISA, но на основе наращиваемых коннекторов, а не торцевых разъемов - очень легкий соединить интерфейсом со специальным оборудованием к)

у Них обычно есть разъемы VGA, которые облегчают делать отладку.

5
задан John 19 November 2009 в 15:50
поделиться

2 ответа

У меня нет VB .Net, но, надеюсь, этот быстрый фрагмент кода C # поможет вам или укажет вам правильное направление.

В этом примере я установил простой DataGridView с двумя столбцами. Первый - это DataGridViewComboBox, заполненный двумя вариантами: «Текст» или «Комбо».

Второй столбец изначально установлен в DataGridViewTextBoxColumn из дизайнера.

Я обрабатываю событие CurrentCellDirtyStateChanged в DataGridView. Я проверяю, не загрязнена ли ячейка, и проверяю только первый столбец (ComboBox). Вы должны вызвать CommitEdit, чтобы получить новое значение в комбинации, иначе вы будете смотреть на предыдущее значение. На основе выбора в поле со списком я затем перезаписываю ячейку во 2-м столбце новой ячейкой этого типа.

Вы должны добавить свою собственную логику (заполнить раскрывающиеся списки и обработать значение). Возможно, вы захотите сохранить значение, а затем вернуть его в ячейку или что-то еще.

Вот код, который я использовал и провел быстрый и грязный тест:

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        if (dataGridView1.IsCurrentCellDirty == false)
        {
            return;
        }

        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);

        if (dataGridView1.CurrentCell.ColumnIndex == 0)
        {               
            if (((string)dataGridView1.CurrentCell.Value) == "Text")
            {
                dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewTextBoxCell();
            }
            else if (((string)dataGridView1.CurrentCell.Value) == "Combo")
            {
                dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewComboBoxCell();
            }
        }
    }

Вот быстрый перевод VB, который я тестировал и работает.

Public Class Form1

Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged

    If DataGridView1.IsCurrentCellDirty = False Then
        Return
    End If

    DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)

    If DataGridView1.CurrentCell.ColumnIndex = 0 Then

        If CStr(DataGridView1.CurrentCell.Value) = "Text" Then
            DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewTextBoxCell

        ElseIf CStr(DataGridView1.CurrentCell.Value) = "Combo" Then
            DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewComboBoxCell
        End If

    End If


End Sub

End Class

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

Джон

3
ответ дан 14 December 2019 в 19:17
поделиться

Вы можете создать свой собственный шаблон ячейки, в котором размещен пользовательский элемент управления. В пользовательском элементе управления вы добавляете текстовое поле и поле со списком, а также добавляете метод / свойство для отображения одного и скрытия другого.

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

2
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

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