gpt4 book ai didi

c# 添加带有 dataGridViewComboBoxCell 的 dgv 行

转载 作者:行者123 更新时间:2023-12-04 00:46:54 24 4
gpt4 key购买 nike

我目前正在尝试将 ComboBox 添加到 dataGridView。

在DGV中,有5列:checkbox, string, string, combobox, combobox。

两个组合框列都配置为 datagridviewcomboboxcolumns(通过 VisualStudio 设计器)。我的问题是添加行。

我目前的尝试是:列已经定义,我通过 dataGridView.Rows.Add 添加行。为此,我使用了一个对象数组。示例:

dataGridViewRow row = new dataGridViewRow();
object[] obj = new object[5] {true, "str1", "str2", null, null};
dataGridView1.Rows.Add(obj);

这通过了,没有任何错误。但从逻辑上讲,组合框没有填充任何东西。

我尝试将数据源设置为一行的第 4 和第 5 个单元格:

错误...使用 ROW.dataGridViewComboBoxCell.Items.Add:项目未显示...

用新的 DGVcomboBoxCell 或 -Column 填充 obj[3] 和 4:

 Error... :The error message says "The dataGridViewComboBoxCell-Value is invalid.

更多信息:每列在组合框中应具有相同的项目。 (这些以前是通过互联网加载的,作为 xml)。将数据源设置为两列会破坏整个 DGV(我认为是因为其他列没有数据源)。简而言之:如何将行添加到包含装满项目的组合框的 DGV?

真诚的,游牧民族

编辑:这里有一些代码可以解决我的问题:

        DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
check.Name = "Col1";
dataGridView1.Columns.Add(check);

dataGridView1.ColumnCount = 3;
dataGridView1.Columns[1].Name = "Col2";
dataGridView1.Columns[2].Name = "Col3";

object[] row = new object[] { true, "str1", "str2" };
dataGridView1.Rows.Add(row);

DataGridViewComboBoxColumn combo1 = new DataGridViewComboBoxColumn();
DataGridViewComboBoxColumn combo2 = new DataGridViewComboBoxColumn();

combo1.Name = "Col4";
combo1.Items.Add("100x100");
combo1.Items.Add("200x200");

combo2.Name = "Col5";
combo2.Items.Add("option1");
combo2.Items.Add("option2");

dataGridView1.Columns.Add(combo1);
dataGridView1.Columns.Add(combo2);

首先添加一行,转换列,配置它们并添加到行中。无需事先在设计器中指定任何列。

最佳答案

您可以使用此解决方案将项目添加到 datagird View 组合框列

 DataSet ds; //class variable
public Form1()
{
InitializeComponent();

ds = new DataSet();
//column 1 (normal textColumn):
dataGridView1.Columns.Add("col1", "Column1");
//column 2 (comboBox):
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
comboCol.Name = "cmbColumn";
comboCol.HeaderText = "combobox column";
dataGridView1.Columns.Add(comboCol);

//using dataTable for each datasource:
for (int i = 0; i < 10; i++)
{
string text = "item " + i; //data for text
int[] data = { 1 * i, 2 * i, 3 * i }; //data for comboBox:

//create new dataTable:
DataTable table = new DataTable("table" + i);
table.Columns.Add("column1", typeof(string));

//fillig rows:
foreach (int item in data)
table.Rows.Add(item);

//add table to dataSet:
ds.Tables.Add(table);

//creating new row in dgv (text and comboBox):
CreateCustomComboBoxDataSouce(i, text, table);
}
}

private void CreateCustomComboBoxDataSouce(int row, string texst, DataTable table) //row index ,and two parameters
{
dataGridView1.Rows.Add(texst);
DataGridViewComboBoxCell comboCell = dataGridView1[1, row] as DataGridViewComboBoxCell;
comboCell.DataSource = new BindingSource(table, null);
comboCell.DisplayMember = "column1"; //name of column indataTable to display!!
comboCell.ValueMember = "column1"; // vlaue if needed
//(mostly you used these two propertes like: Name as DisplayMember, and Id as ValueMember)
}

如果上述方法不起作用,请查看下面的解决方案..

您可以通过 DataGridViewComboBoxCell 来完成。根据cell的rowIndex,将不同的datasource(string[])设置到不同的DataGridViewComboBoxCell。像这样编码:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
DataGridViewComboBoxCell combo = this.dataGridView1[0, e.RowIndex] as DataGridViewComboBoxCell;

if (e.RowIndex == 0)
{
//these data will be displayed in comboBox:
string[] data= {"item A1", "item B1", "item C1"};
combo.DataSource = data;
}
if (e.RowIndex == 1)
{
//these data will be displayed in comboBox:
string[] data = {"item A2", "item B2", "item C2"};
combo.DataSource = data;
}
if (e.RowIndex == 2)
{
//these data will be displayed in comboBox:
string[] data = { "item A3", "item B3", "item C3" };
combo.DataSource = data;
}

}
}
}

关于c# 添加带有 dataGridViewComboBoxCell 的 dgv 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com