这是一个简单的示例项目,我刚刚制作完成。
我认为你出错的关键是的DataPropertyName
属性需要引用DataGridView
的数据源,而不是列。
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable("Customers");
DataColumn dc;
dc = new DataColumn();
dc.DataType = typeof(int);
dc.ColumnName = "CustomerID";
dt.Columns.Add(dc);
dt.Columns.Add(new DataColumn("LastName"));
dt.Columns.Add(new DataColumn("FirstName"));
// Concatenation of first and last names
dt.Columns.Add(new DataColumn("FullName"));
dt.Columns.Add(new DataColumn("Address"));
dt.Columns.Add(new DataColumn("City"));
dt.Columns.Add(new DataColumn("State"));
dt.Columns.Add(new DataColumn("Zip"));
dt.Columns.Add(new DataColumn("Phone"));
dc = new DataColumn();
dc.DataType = typeof(DateTime);
dc.ColumnName = "LastPurchaseDate";
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = typeof(int);
dc.ColumnName = "CustomerType";
dt.Columns.Add(dc);
// Populate the table
dt.Rows.Add(2, "Baggins", "Bilbo", "Baggins, Bilbo", "Bagshot Row #1", "Hobbiton", "SH", "00001", "555-2222", DateTime.Parse("24/9/2008"), 1);
dt.Rows.Add(1, "Baggins", "Frodo", "Baggins, Frodo", "Bagshot Row #2", "Hobbiton", "SH", "00001", "555-1111", DateTime.Parse("14/9/2008"), 1);
dt.Rows.Add(6, "Bolger", "Fatty", "Bolger, Fatty", "ProudFeet Creek", "Hobbiton", "SH", "00001", "555-1111", DateTime.Parse("14/9/2008"), 1);
dt.Rows.Add(4, "Elessar", "Aragorn", "Elessar, Aragorn", "Citadel", "Minas Tirith", "Gondor", "00000", "555-0000", DateTime.Parse("14/9/2008"), 4);
dt.Rows.Add(5, "Evenstar", "Arwin", "Evenstar, Arwin", "Citadel", "Minas Tirith", "Gondor", "00000", "555-0001", DateTime.Parse("23/9/2008"), 4);
dt.Rows.Add(3, "Greyhame", "Gandalf", "Grayhame, Gandalf", DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, 3);
DataGridViewComboBoxColumn cboCategory = new DataGridViewComboBoxColumn();
List<CustomerType> customerTypes = new List<CustomerType> { new CustomerType { Id = 1, Name = "Good" }, new CustomerType { Id = 4, Name = "Bad" }, new CustomerType { Id = 3, Name = "Ugly" } };
cboCategory.HeaderText = "Customer Type";
cboCategory.DataSource = customerTypes;
cboCategory.DisplayMember = "Name";
cboCategory.ValueMember = "Id";
cboCategory.DataPropertyName = "CustomerType";
dataGridView1.Columns.Add(cboCategory);
dataGridView1.DataSource = dt;
}
在那里的绒毛位 - 从网页中抓取了可数据表的代码。但是关键部分是组合框列的属性设置。
我的数据源是customertype对象的列表:
public class CustomerType
{
public int Id { get; set; }
public string Name { get; set; }
}
所以我需要设置DisplayMember在列“名称”和ValueMember为“ID”,因为这引用的列数据源。 但是,DataPropertyName的被设置为“CustomerType”的值,这是DataTable中绑定到DataGridView的列的名称。
所以在聊天讨论一丁点后,原来上面是真的,但你还需要确保你的类型ID列的匹配。
用于提供数据到ComboBox列中的数据表是从SQL查询生成并具有在型的id列你的背衬的数据表已经id列由像这样:
dt.Columns.Add(new DataColumn("Category"));
缺省为一个字符串类型的列。尝试,而不是像这样:
downtimeEntries.Columns.Add("Category", typeof(int));
你能提供(populalting的数据表,将其分配到网格的数据源,等...)你正在尝试做的是相当直接的,但没有完整的代码,它是完整的代码很难说出错的地方。 (可能我们可以讨论聊天,如果你在线) – 2012-02-15 15:34:15
另外 - 它不明确 - 但是当你说行是空的,你是否意味着在数据表中,当你试图在数据入口后检查它?为什么你不绑定到表单级数据表,然后直接引用该对象?不知道这种调整是否能解决问题,但它会使代码更清洁。 – 2012-02-15 15:38:57
我想通过它聊天,我如何邀请你聊天? – MAW74656 2012-02-15 15:48:39