C# 将DataGridView中ComboBox的值与另一个单元格匹配
我有一个带有组合框的C# 将DataGridView中ComboBox的值与另一个单元格匹配,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我有一个带有组合框的DataGridView。 组合框中会填充特定的名称列表,并且它们在DataGridView中的每一行都是相同的 填写我的DataGridView后,我想执行以下操作: 我希望每个组合的值都设置为对应行的“表列”值(如果存在) 也就是说,在上面的图片中,我希望第一个组合的值是“id”(如果它包含一个名为“id”的项),第二个组合的值是“firstname”,等等 如果未找到该值,则不应在组合框中选择任何值 更新:我的当前代码不起作用 private void Mapping
DataGridView
。
组合框中会填充特定的名称列表,并且它们在DataGridView
中的每一行都是相同的
填写我的DataGridView
后,我想执行以下操作:
我希望每个组合的值都设置为对应行的“表列”值(如果存在)
也就是说,在上面的图片中,我希望第一个组合的值是“id”(如果它包含一个名为“id”的项),第二个组合的值是“firstname”,等等
如果未找到该值,则不应在组合框中选择任何值
更新:我的当前代码不起作用
private void Mappings_Load(object sender, EventArgs e)
{
dgv.DataSource = tableColumns.Select(x => new { Value = x }).ToList();
dgv.Columns[0].HeaderText = "Table Columns";
DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();
comboColumn.HeaderText = "File Columns";
foreach (var item in fileColumns)
comboColumn.Items.Add(item);
dgv.Columns.Add(comboColumn);
foreach(DataGridViewRow row in dgv.Rows)
{
string tableColumnValue = row.Cells[0].Value.ToString();
row.Cells[0].Value = tableColumnValue;
}
}
不久前,我做了一件类似的事情:
识别哪些字段属于类型enum
对于enum
类型的字段,在DataGridView
的单元格中显示一个组合框(包含enum
的所有可能值),而不是简单的文本字段李>
我认为您只需更改代码的某些部分,即可将其转换为您想要实现的目标:
public partial class TableView<CollectionType, ItemType> : Form
{
public TableView(CollectionType elements)
{
InitializeComponent();
// custom:
this.DataGridView.DataSource = elements;
AdaptColumnsToColumnValueType();
}
private void AdaptColumnsToColumnValueType()
{
for (int columnIndex = 0; columnIndex < this.DataGridView.Columns.Count; columnIndex++)
{
var column = (DataGridViewColumn)this.DataGridView.Columns[columnIndex];
if (column.ValueType.IsEnum)
{
ReplaceColumnInDatagridView(
oldColumn: column,
newColumn: CreateComboBoxWithEnums(column));
}
}
}
private void ReplaceColumnInDatagridView(DataGridViewColumn oldColumn, DataGridViewColumn newColumn)
{
int columnIndex = oldColumn.Index;
this.DataGridView.Columns.Remove(oldColumn);
this.DataGridView.Columns.Insert(columnIndex, newColumn);
}
private DataGridViewComboBoxColumn CreateComboBoxWithEnums(DataGridViewColumn replacedEnumColumn)
{
var comboboxColumn = new DataGridViewComboBoxColumn();
comboboxColumn.DataSource = Enum.GetValues(replacedEnumColumn.ValueType);
comboboxColumn.DataPropertyName = replacedEnumColumn.DataPropertyName;
comboboxColumn.Name = replacedEnumColumn.Name;
return comboboxColumn;
}
}
public分部类TableView:Form
{
公共表视图(CollectionType元素)
{
初始化组件();
//自定义:
this.DataGridView.DataSource=元素;
AdapteColumnStoColumnValueType();
}
private void AdapteColumnStoColumnValueType()
{
对于(int columnIndex=0;columnIndex
不久前,我做了一件类似的事情:
识别哪些字段属于类型enum
对于enum
类型的字段,在DataGridView
的单元格中显示一个组合框(包含enum
的所有可能值),而不是简单的文本字段李>
我认为您只需更改代码的某些部分,即可将其转换为您想要实现的目标:
public partial class TableView<CollectionType, ItemType> : Form
{
public TableView(CollectionType elements)
{
InitializeComponent();
// custom:
this.DataGridView.DataSource = elements;
AdaptColumnsToColumnValueType();
}
private void AdaptColumnsToColumnValueType()
{
for (int columnIndex = 0; columnIndex < this.DataGridView.Columns.Count; columnIndex++)
{
var column = (DataGridViewColumn)this.DataGridView.Columns[columnIndex];
if (column.ValueType.IsEnum)
{
ReplaceColumnInDatagridView(
oldColumn: column,
newColumn: CreateComboBoxWithEnums(column));
}
}
}
private void ReplaceColumnInDatagridView(DataGridViewColumn oldColumn, DataGridViewColumn newColumn)
{
int columnIndex = oldColumn.Index;
this.DataGridView.Columns.Remove(oldColumn);
this.DataGridView.Columns.Insert(columnIndex, newColumn);
}
private DataGridViewComboBoxColumn CreateComboBoxWithEnums(DataGridViewColumn replacedEnumColumn)
{
var comboboxColumn = new DataGridViewComboBoxColumn();
comboboxColumn.DataSource = Enum.GetValues(replacedEnumColumn.ValueType);
comboboxColumn.DataPropertyName = replacedEnumColumn.DataPropertyName;
comboboxColumn.Name = replacedEnumColumn.Name;
return comboboxColumn;
}
}
public分部类TableView:Form
{
公共表视图(CollectionType元素)
{
初始化组件();
//自定义:
this.DataGridView.DataSource=元素;
AdapteColumnStoColumnValueType();
}
private void AdapteColumnStoColumnValueType()
{
对于(int columnIndex=0;columnIndex
您可以使用DataGridViews RowsAdded事件
编辑:cmb是您的ComboBoxColumn
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
//Check if comboboxcolumn contains the value
if(cmb.Items.Contains(dataGridView1.Rows[e.RowIndex].Cells[0].Value)) {
//Set the value
dataGridView1.Rows[e.RowIndex].Cells["cmb"].Value = dataGridView1.Rows[e.RowIndex].Cells[0].Value;
}
}
您可以使用DataGridViews RowsAdded事件
编辑:cmb是您的ComboBoxColumn
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
//Check if comboboxcolumn contains the value
if(cmb.Items.Contains(dataGridView1.Rows[e.RowIndex].Cells[0].Value)) {
//Set the value
dataGridView1.Rows[e.RowIndex].Cells["cmb"].Value = dataGridView1.Rows[e.RowIndex].Cells[0].Value;
}
}
追踪变化你几乎做到了
private void Form1_Load(object sender, EventArgs e)
{
string[] tableColumns = new string[] { "A", "B", "C", "D" };
string[] fileColumns = new string[] { "A", "B", "C", "X" };
dgv.DataSource = tableColumns.Select(x => new { Value = x }).ToList();
dgv.Columns[0].HeaderText = "Table Columns";
DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();
comboColumn.HeaderText = "File Columns";
foreach (var item in fileColumns)
comboColumn.Items.Add(item);
dgv.Columns.Add(comboColumn);
foreach (DataGridViewRow row in dgv.Rows)
{
string tableColumnValue = row.Cells[0].Value.ToString();
//Change is here
if (fileColumns.Any(i => i == tableColumnValue))
{
row.Cells[1].Value = tableColumnValue;
}
//end change
}
}
追踪变化你几乎做到了
private void Form1_Load(object sender, EventArgs e)
{
string[] tableColumns = new string[] { "A", "B", "C", "D" };
string[] fileColumns = new string[] { "A", "B", "C", "X" };
dgv.DataSource = tableColumns.Select(x => new { Value = x }).ToList();
dgv.Columns[0].HeaderText = "Table Columns";
DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();
comboColumn.HeaderText = "File Columns";
foreach (var item in fileColumns)
comboColumn.Items.Add(item);
dgv.Columns.Add(comboColumn);
foreach (DataGridViewRow row in dgv.Rows)
{
string tableColumnValue = row.Cells[0].Value.ToString();
//Change is here
if (fileColumns.Any(i => i == tableColumnValue))
{
row.Cells[1].Value = tableColumnValue;
}
//end change
}
}
“到目前为止你做了什么?”穆米特更新了这个问题。请看一看!“到目前为止你做了什么?”穆米特更新了这个问题。请看一看!