DataGridView 设置列单元格 Combobox

17

我在Datagridview中有这样的表:

 Name   Money
 -------------
 Hi      100   //here Combobox with member {10,30,80,100} to choose
 Ki      30    //here Combobox with member {10,30,80,100} to choose

我想从组合框中更改“Money”列的值。

我尝试了这个,但不知道下一步该怎么做:

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Money", typeof(String));
dt.Rows.Add(new object[] { "Hi", 100});
dt.Rows.Add(new object[] { "Ki", 30});

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
var list11 = new List<string>() { "10", "30", "80", "100" };
column.DataSource = list11;
column.ValueMember = "Money";
dataGridView1.Columns.Add(column); 
8个回答

36

试试这个

dataGridView1.AutoGenerateColumns = false;

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Money", typeof(String));
dt.Rows.Add(new object[] { "Hi", 100 });
dt.Rows.Add(new object[] { "Ki", 30 });

DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn();
var list11 = new List<string>() { "10", "30", "80", "100" };
money.DataSource = list11;
money.HeaderText = "Money";
money.DataPropertyName = "Money";

DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn();
name.HeaderText = "Name";
name.DataPropertyName = "Name";

dataGridView1.DataSource = dt;
dataGridView1.Columns.AddRange(name, money);

只需使用 DataPropertyName 而不是 ValueMember


3

你已经接近完成了。

只有两个小问题:

  1. 在你的表格中,你将行的“Money”值添加为整数,而在列中它们被定义为字符串
  2. 先将你的表格添加为DataGridView DataSource,然后再设置列的DataPropertyName

以下是完整的代码:

var table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Money", typeof(string));
table.Rows.Add("Hi", "100");
table.Rows.Add("Ki", "30");

var column = new DataGridViewComboBoxColumn();
column.DataSource = new List<string>() { "10", "30", "80", "100" };            

dataGridView1.Columns.Add(column);
dataGridView1.DataSource = table;

1

您可以尝试以下方法:

DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
column.Name = "Money";
column.DataSource = new string[] { "10", "30", "80", "100" };
dataGridView1.Columns.Add(column);

for (int row = 0; row < dataGridView1.Columns.Count; row++)
{
   DataGridViewComboBoxCell cell = 
       (DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["Money"]);
   cell.DataSource = new string[] { "80", "100" };
}

或者这样:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["Money"]);
    cell.DataSource = new string[] { "10", "30" };
}

1

您可以替换为

dt.Columns.Add("Money", typeof(List<string>));

1
注意在设计器中设置网格时,您的ComboBox列的索引。在此示例中,它是1。Money列的索引为1。该网格已经有一个成员是DataGridViewComboBoxColumn。当您初始化包含控件的表单时,请获取并初始化它。像这样:
DataGridViewComboBoxColumn cbc = (DataGridViewComboBoxColumn)dataGridView1.Columns[1];
cbc.Items.Add("10");
cbc.Items.Add("30");
cbc.Items.Add("80");
cbc.Items.Add("100");

当你填充网格时,将文本值插入该单元格。当用户单击单元格时,下拉列表将出现,他们就可以更改值。

实际上,如果您只想使用这些值创建下拉列表,您可以通过修改设计师中的“Items”集合来完成。


0
我知道现在有点晚了,不过你可以试试这个:
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(String));
            dt.Columns.Add("Money", typeof(String));
            dt.Rows.Add(new object[] { "Hi", 100 });
            dt.Rows.Add(new object[] { "Ki", 30 });

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Money", typeof(String));
            dt2.Columns.Add("Meaning", typeof(String));
            dt2.Rows.Add(new object[] { "30" ,"Name 1" });
            dt2.Rows.Add(new object[] { "100", "Name 2" });
            dt2.Rows.Add(new object[] { "80", "Name 3" });
            dt2.Rows.Add(new object[] { "90", "Name4" });

            DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn();

            money.DataSource = dt2;
            money.HeaderText = "Money";
            money.DataPropertyName = "Money";
            money.DisplayMember = "Meaning";
            money.ValueMember = "Money";

            DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn();
            name.HeaderText = "Name";
            name.DataPropertyName = "Name";

            DGV.Columns.Add(money);
            DGV.Columns.Add(name);
            DGV.DataSource = dt;

0
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList();
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key";
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value";

0

你可以很容易地在Visual Studio设计器中完成以下操作:

  1. 选择(左键单击)数据网格视图(DGV)
  2. 在DGV的属性中,点击链接"编辑列"。一个对话框将被打开。
  3. 在“选定的列”列表中选择要更改为组合框的列
  4. 在对话框右侧的"未绑定列属性",“设计”部分中,找到ColumnType属性
  5. ColumnType属性值更改为DataGridViewComboBoxColumn
  6. 在“数据”部分下,点击右边带有三个点的“项”,并在String Collection Editor中输入要添加的值
  7. 通过单击确定保存更改。

运行应用程序。现在,在步骤6中输入的值将显示在下拉框中。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接