C #: Как отобразить данные привязки с DataGridViewComboBoxColumn в DataGridView - PullRequest
0 голосов
/ 28 сентября 2010

Не думаю, что это сложная проблема. но я просто не могу найти / гуглить ответ. Пожалуйста, помогите.

По сути, мое приложение помогает пользователям найти список слов (из набора файлов) и список списков файлов, содержащих эти слова.

Скажи, что у меня есть:

public class WordInfo
{
    public string Word { get; set; }
    public List<string> Files { get; set; }
}

И я также создал BindingList<WordInfo> из List<WordInfo> и связал BindingList<WordInfo> как DataGridView.DataSource

Я просто не знаю, как отобразить WordInfo.Files с DataGridViewComboBoxColumn в DataGridView.

Я много гуглил, похоже, мне нужно установить:

DataGridViewComboBoxColumn cbxColumn = dgvWordList.Columns["Files"] as DataGridViewComboBoxColumn;
cbxColumn.DataSource = ??????; // How to get this data source from BindingList<WordInfo>
cbxColumn.DisplayMemeber = "DisplayMemeber"; // Can I have an example?
cbxColumn.ValueMember = "ValueMember"; // Can I have an example?

Но я не знаю, как установить эти свойства. Я гуглил, но примеры слишком сложные.

Пожалуйста, помогите. спасибо.

Я думаю, у меня есть некоторые проблемы с пониманием DataGridViewComboBoxColumn, и документация MSDN свела меня с ума.

Peter

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Решено!
Наконец-то я нашел ответ ... Вам не нужно использовать какое-либо событие ... просто напишите этот код после привязки кода определения (возможно, на form_Load)

int x = 0;
foreach (WordInfo word in ww)
{
    DataGridViewComboBoxCell dgCell = ((DataGridViewComboBoxCell)dgvWordList.Rows[x++].Cells["clFiles"]);
    dgCell.Items.AddRange(word.Files.ToArray());
}

Удачи, мой друг;)

0 голосов
/ 28 сентября 2010

Дело в том, что я думаю, что у вас не может быть только одного BindingList из просто слов ...
Вы должны определить одно BindingList<WordInfo> и связать свойство Word со столбцом Word таблицы данных. тогда вам нужно написать небольшой код в RowEnter или где-то еще об изменении текущей строки, чтобы связать список файлов с этим DataGridViewComboBoxColumn. Вот что я сделал:



WordInfoCollection ww;

private void Form1_Load(object sender, EventArgs e)
{
    ww = new WordInfoCollection();

    //After filling data to this variable, 
    //you should set it as a BindignSource DataSource property
    wordsBindingSource.DataSource = ww;
}

private void wordsBindingSource_CurrentChanged(object sender, EventArgs e)
{
    if (wordsBindingSource.Current == null) return;

    clFiles.DataSource = ww[wordsBindingSource.Position].Files;
}

тогда вам просто нужно привязать ваше представление данных к wordsBindingSource ...
Удачи

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