C#:如何在DataGridView中使用DataGridViewComboBoxColumn显示绑定数据

时间:2010-09-28 05:32:33

标签: c# datagridview

我认为这不是一个难题。但我找不到/谷歌的答案。请帮忙。

基本上,我的应用程序可以帮助用户查找单词列表(来自一堆文件),以及包含这些单词的文件列表。

说我有:

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

我google了很多,似乎我必须设置:

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?

但我不知道如何设置这些属性。我用Google搜索,但示例太复杂了。

请帮忙。感谢。

我认为我在理解DataGridViewComboBoxColumn时遇到了一些问题,MSDN文档让我发疯了。

彼得

2 个答案:

答案 0 :(得分:0)

问题是我认为你不能只有一个单词的BindingList ...
您应该定义一个BindingList<WordInfo>并将Word属性绑定到datagrid的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;
}

然后您只需将datagridview绑定到wordsBindingSource ...
祝你好运

答案 1 :(得分:0)

解决!
最后我找到了答案......您不需要使用任何事件......只需在绑定defenition代码后编写此代码(可能在form_Load上)

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

祝你好运我的朋友;)