C # Datagridview: получить выбранный элемент в выпадающих списках - PullRequest
2 голосов
/ 19 мая 2011

Я работаю над графическим интерфейсом, который позволяет пользователю манипулировать XML-файлами.Я отображаю xml-файл в виде таблицы данных, организованной аккуратно по столбцам через xml-элементы.Я разрешаю пользователю добавлять столбцы в качестве расширения моего проекта.Столбец добавляется в таблицу набора данных, а затем обновляется до таблицы данных, которую я использую для отображения XML-файла. Я включил возможность для пользователя добавлять столбец комбинированного списка для выбора вариантов вместо того, чтобы вводить их постоянно, как ...правда или ложь.Однако в этом и заключается проблема.Сохранить нормальный столбец было легко.Столбец в поле со списком вызывает боль.

У меня есть «столбец со списком сохранения», чтобы обновить его до XML, и кнопка «Сохранить» для сохранения в месте назначения по выбору пользователя.

Я провел некоторое исследование, и кажется, что класс combobox имеет такую ​​функцию, чтобы получить доступ к выбранному элементу в поле combobox, введенном пользователем.Где у нас есть:

    ComboBox box = new ComboBox();
    box.SelectedItem;

Я пытался применить это к классу столбцов combobox, но у него нет такой функции.Таким образом, я не могу понять, как напрямую получить значение выбранного пользователем элемента.Я тоже попробовал поэкспериментировать с comboboxcell, но это ни к чему меня не привело.Оба этих класса, с которыми я играл, не имеют функции ... "выбранный элемент", и даже у Google нет решения для меня.= (Я также пытался использовать cell.value, но по какой-то причине он является «нулевым». Даже когда пользователь выбирает элемент в поле, он не сохраняется в значении ячейки.

TLDR: Короче, мой вопрос: как, если это возможно, получить доступ к выбранному элементу ячейки comboboxcolumn? Кроме того, как бы вы затем гарантировали сохранение значения элемента в ячейке?

Спасибо заЗаранее. Я использую .NET 3.5 SP1, через Visual Studio 2008 C #.

С уважением,

tf.rz

Ответы [ 6 ]

11 голосов
/ 19 мая 2011

Элемент управления в DataGridView не является ComboBox, это DataGridViewComboBox и имеет различные свойства и методы. От MSDN

В отличие от элемента управления ComboBox, DataGridViewComboBoxCell не имеет свойств SelectedIndex и SelectedValue. Вместо этого при выборе значения в раскрывающемся списке устанавливается свойство «Значение ячейки».

Однако вы упомянули, что Cell.Value для вас пусто. Ну, может быть, есть еще один шаг, который вы пропустите в соответствии со следующей статьей http://msdn.microsoft.com/en-us/library/ms404353(v=VS.90).aspx

Необходимо установить для свойства DataGridViewComboBoxColumn.ValueMember или DataGridViewComboBoxCell.ValueMember имя свойства вашего бизнес-объекта. Когда пользователь делает выбор, указанное свойство бизнес-объекта устанавливает свойство ячейки Значение.

2 голосов
/ 07 апреля 2012

Если мы связали datagridcomboboxcell с другими DisplayMember и ValueMember, вот так:

dgcombocell.DisplayMember = "Name"; 
dgcombocell.ValueMember = "Id";  
dgcombocell.DataSource = dataset1.Tables[0];

Тогда для получения SelectedText и SelectedValue мы можем написать этот код:

string SelectedText = Convert.ToString((DataGridView1.Rows[0].Cells["dgcombocell"] as DataGridViewComboBoxCell).FormattedValue.ToString());
int SelectedVal = Convert.ToInt32(DataGridView1.Rows[0].Cells["dgcombocell"].Value);

Надеюсь, это решит вашу проблему.

1 голос
/ 23 марта 2013

Вот как это делается

  DataGridViewComboBoxCell comboCell = (DataGridViewComboBoxCell)dgv.Rows[0].Cells[1];

  MessageBox.Show(""+comboCell.Items.IndexOf(comboCell.Value));
1 голос
/ 24 января 2013

Используйте это, чтобы получить или установить выбранное значение:

object selectedValue = currentRow.Cells["comboboxColumnName"].Value

Не забудьте установить DisplayMember и ValueMember для вашего DataGridViewComboBoxColumn

0 голосов
/ 29 апреля 2015

Я использую это:

private int GetDataGridViewComboBoxCellSelectedIndex(DataGridViewCell d)
{
     return ((DataGridViewComboBoxCell)d).Items.IndexOf(d.Value);
}
0 голосов
/ 19 мая 2011

. Combox на самом деле является составным элементом управления, состоящим из текстового поля и выпадающего списка. Используйте box.Text, чтобы получить текущую отображаемую информацию.

EDIT: строка или ячейка должны иметь метод .FindControl (). Вам нужно будет сделать что-то вроде:

Combobox box = (Combobox)(row.FindControl("[combobox ID]"));<br> string val = box.Text;

По сути, вы находите элемент управления в его контейнере (строке или ячейке), затем применяете элемент управления, найденный как комбинированный список, и затем получаете доступ к его свойству .Text.

...