Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridViewComboBox数据源_C#_Winforms - Fatal编程技术网

C# DataGridViewComboBox数据源

C# DataGridViewComboBox数据源,c#,winforms,C#,Winforms,我目前有一个2列宽的DataGridView,第一列是DataGridViewTextBoxColumn,第二列是DataGridViewComboxColumn。我还有一个预生成的通用列表(字符串),它将用作每行DataGridViewComboBox的数据源 最后,我有一个循环,循环遍历一系列字符串并相应地解析它们,提取的值使用如下所示的 dataGridView.Rows.Add("Column1Text", "Column2Text"); gridview数据按预期填充,DataGri

我目前有一个2列宽的DataGridView,第一列是DataGridViewTextBoxColumn,第二列是DataGridViewComboxColumn。我还有一个预生成的通用列表(字符串),它将用作每行DataGridViewComboBox的数据源

最后,我有一个循环,循环遍历一系列字符串并相应地解析它们,提取的值使用如下所示的

dataGridView.Rows.Add("Column1Text", "Column2Text");
gridview数据按预期填充,DataGridViewComboBox正确显示理想项

问题是,单击DataGridViewComboBox时,不会下拉任何项目。我已检查DataGridViewComboBox是否包含项。DataGridViewTextBoxColumn的AutoSizeMode设置为“填充”,如果它具有任何相关性

对我可能做错了什么有什么见解吗?单击给定单元格时是否必须手动下拉项目?谢谢

更新

在将泛型列表绑定为数据源方面,我尝试了两种不同的方法

第一个是通过以下方式绑定整个列本身的数据源:

col_key.DataSource = KeyList;
第二种方法是绑定对应行中每个新DataGridViewComboxCell的数据源:

(DataGridViewComboBoxCell)(row.Cells[1]).DataSource = KeyList;

这两种方法都会在运行时编译并正确添加必要的项,但单击时不会下拉任何项。

要填充网格Combo列,应将其视为常规Combo,Combo的datasource应具有valuemember和displaymember,因此请检查以下示例:

//Coded by Amen Ayach's DataClassBuilder @26/02/2012
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class iddesc{

    private int _id;
    public int id{
        get {
            return _id;
        }
        set {
            _id = value;
        }
    }

    private string _description;
    public string description{
        get {
            return _description;
        }
        set {
            _description = value;
        }
    }

}
要填充网格,请执行以下操作:

    private void FillData()
    {
        List<iddesc> DataList = new List<iddesc>();
        for (int i = 1; i < 11; i++)
        {
            DataList.Add(new iddesc() { id = i, description = "Desc" + i.ToString() });
        }
        ComboCol.ValueMember = "id";
        ComboCol.DisplayMember = "description";
        ComboCol.DataSource = DataList;

        for (int i = 0; i < 10; i++)
        {
            grd.Rows.Add();
            grd[ComboCol.Name, i].Value = DataList[i].id;//Here you deliver the valuemember
            grd[Column1.Name, i].Value = DataList[i].description;
        }
    }
private void FillData()
{
List DataList=新列表();
对于(int i=1;i<11;i++)
{
添加(新的iddesc(){id=i,description=“Desc”+i.ToString()});
}
ComboCol.ValueMember=“id”;
ComboCol.DisplayMember=“description”;
ComboCol.DataSource=数据列表;
对于(int i=0;i<10;i++)
{
grd.Rows.Add();
grd[ComboCol.Name,i].Value=DataList[i].id;//在这里传递valuemember
grd[Column1.Name,i].Value=DataList[i].description;
}
}

我选择在CellEnter事件中处理此问题:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 2)
        {
            DataGridViewComboBoxCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
            if (cell.DataSource == null)
            {
                cell.DataSource = this._ComboItemsBindingSource;
                cell.DisplayMember = "Value"; //lite-weight wrapper on string
                cell.ValueMember = "Value";   //where Value is a property
            }
        }
    }

我也有类似的问题。我发现将DGV的EditMode属性设置为Editonner(以前是以编程方式编辑的)修复了该问题。这可以在设计器中完成。

您也可以显示绑定吗?在.row中添加除DataGridViewRow之外的任何内容都会让人感觉不对劲。请在选择combobox列时添加网格的屏幕截图,好吗?能否显示如何从预生成的列表中填充combobox?我不认为我不熟悉这种技术。预生成的列表只是一个在DataGridView完成任何操作之前填充的通用列表。@NateShoffner:如果多次单击单元格会发生什么?还是没什么?顺便问一下,您是否将DisplayMember和ValueMember留空?应该是这样的。只要试一下这个代码段(必要时更改名称),我就遇到了一些问题。内容会加载,但当我单击组合框时,什么都不会发生。它与标准的WinForms组合框配合使用也非常好。@NateShoffner,我认为它只是:
ComboCol.ReadOnly=false将ReadOnly属性设置为true或false似乎没有任何区别。这很奇怪,兄弟,你确定ComboCol.ReadOnly=false;和grid.ReadOnly=false;你没有取消CellBeginEdit活动?好的。我想我总是可以尝试在单击单元格时手动删除项目列表。谢谢你的帮助。