Получение элементов из --- DataGridViewComboBoxColumn - PullRequest
0 голосов
/ 07 июня 2009

Предположим, я разработал DataGridView, чтобы иметь comboBoxColumn с именем dataGridViewComboBocColumn.

Я могу заполнить поле со списком, используя следующий код:

private void DataGridViewForm_Load(object sender, EventArgs e)
    {
        BookCollection books = Book.GetAllBooks();

        foreach (Book b in books)
        {                
            dataGridViewComboBocColumn.Items.Add(b);
        }

        dataGridViewComboBocColumn.DisplayMember = "BookName";
        dataGridViewComboBocColumn.ValueMember = "BookISBN";
    }

Но как мне получить выбранный объект предмета? Так что я могу разыграть и преобразовать этот предмет в объект Book.

Ответы [ 2 ]

0 голосов
/ 08 июня 2009

Хорошо, вот небольшой взлом, который вы можете сделать. Сначала подключитесь к событию EditingControlShowing DataGridView, и в обработчике события EventArgs есть свойство e.Control, которое можно привести к стандартному ComboBox. Итак, оставьте словарь, в котором ключевое слово int является индексом строки. Затем в обработчике событий добавьте поле со списком в словарь:

    private Dictionary<int, ComboBox> comboBoxes;
    public Form1()
    {
        InitializeComponent();
        this.comboBoxes = new Dictionary<int, ComboBox>();
        this.dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
    }

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        var cb = e.Control as ComboBox;
        if (!(this.comboBoxes.ContainsKey(this.dataGridView1.CurrentRow.Index)))
        {
            this.comboBoxes.Add(this.dataGridView1.CurrentRow.Index, cb);
        }
    }

Затем, когда вам нужно вывести объект из из комбинированного списка, просто выполните итерацию по своему словарю, получите правильный комбинированный список и просто получите SelectedItem / SelectedValue.

0 голосов
/ 07 июня 2009

Вы не можете: (

Это ограничение DataGridViewComboBoxColumn.

Я обошел это, создав TypeDescriptor, который добавляет дополнительный элемент с именем 'this', который возвращает экземпляр.

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