我有一个简单的数据库(SQL),Cars Table有六个字段:ID,所有者,年份,颜色,品牌和型号。颜色表只是:ID,ColorName。
我有一个带有DataGridView的表单。当我将Cars表绑定到DataGridView时,一切正常。
现在,我正在尝试将DataGridView中的Colors Column作为一个用于编辑的组合框,并仅列出我的Colors Table中的颜色。我可以创建并向DataGridView添加一个comboBox,但我想“转换”已经包含数据的列。
提前感谢您提供的任何帮助。
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace EditingCells
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var myDataBase = new CarsEntities();
List<MyCar> data = myDataBase.MyCars.OrderBy(o => o.Owner).ToList();
//dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = data;
const int index = 2; // Column Index for Color
List<string> myColor = myDataBase.Colors.Select(s => s.Color1).ToList();
var comboBoxColumn = new DataGridViewComboBoxColumn
{
DataSource = myColor,
DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing,
AutoComplete = true,
};
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditType.ToString());
}
}
}
答案 0 :(得分:1)
基于此 - &gt; “Change Cell Type on Databound DataGridView to Custom DataGridViewCell Type”主题,我建议您开展以下工作:
public partial class Form1 : Form
{
List<string> availableCarColors = new List<string>();
List<MyCar> data = new List<MyCar>();
public Form1()
{
InitializeComponent();
availableCarColors.Add("Red");
availableCarColors.Add("Blue");
data.Add(new MyCar("Lexus", "Blue"));
data.Add(new MyCar("BMW", "Red"));
DataGridViewTextBoxColumn colModel = new DataGridViewTextBoxColumn();
colModel.Name = "Model"; //Header Text
colModel.DataPropertyName = "Model"; //Property Name of my car class
DataGridViewComboBoxColumn colColor = new DataGridViewComboBoxColumn();
colColor.Name = "Color";
colColor.DataPropertyName = "Color";
colColor.DataSource = availableCarColors;
dataGridView1.AutoGenerateColumns = false;
dataGridView1.Columns.AddRange(new DataGridViewColumn[] {colModel, colColor});
dataGridView1.DataSource = data;
}
class MyCar
{
public string Model { get; set; }
public string Color { get; set; }
public MyCar(string model, string color)
{
Model = model;
Color = color;
}
}
}
答案 1 :(得分:1)
您必须使用此设置使用Colors表数据填充DataGridViewComboBoxColumn:
答案 2 :(得分:0)
我只想发布我如何使用@ Tezzo的解决方案来获得我需要的结果:
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace EditingCells
{
public partial class Form1 : Form
{
private readonly CarsEntities _myDataBase = new CarsEntities();
public Form1()
{
InitializeComponent();
List<MyCar> myData = _myDataBase.MyCars.ToList();
// Yes, you have do make Columns manually.
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = myData;
List<Color> myColors = _myDataBase.Colors.ToList();
var carOwner = new DataGridViewTextBoxColumn
{
DataPropertyName = "Owner",
HeaderText = @"Owner",
Name = "Owner",
};
dataGridView1.Columns.Add(carOwner);
var carColor = new DataGridViewComboBoxColumn
{
// Field Name where existing data is stored
DataPropertyName = "CarColor",
HeaderText = @"Color",
Name = "Color",
DataSource = myColors,
DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing,
AutoComplete = true,
// Field value from DataSource to store in Car.Color field
ValueMember = "ColorName",
// Field value from DataSource to show in DataGridView Column
DisplayMember = "ColorName",
};
dataGridView1.Columns.Add(carColor);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_myDataBase.SaveChanges();
}
}
}