我遇到的问题是datagridview没有用数据库中的值填充组合框列只有一列,其他工作完美。 这就是我填充表格然后用组合框列更改文本框列的方法。
DataTable t = new DataTable();
a.Fill(t);
c.Close();
rootDataView.DataSource = CheckColumns(t);
foreach (primaryKey klic in pKeys)
{
if (comboException.Contains(klic.FKColumn))
{
continue;
}
int indexOfpKeyCol = rootDataView.Columns.IndexOf(rootDataView.Columns[klic.FKColumn]);
rootDataView.Columns.Remove(klic.FKColumn);
DataGridViewComboBoxColumn cbColumn = new DataGridViewComboBoxColumn();
cbColumn.Name = klic.FKColumn;
cbColumn.DataPropertyName = klic.FKColumn;
cbColumn.Items.Add("");
SqlCommand command = new SqlCommand("select "+ klic.PKColumn +" from "+ klic.PKTable, c);
c.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
cbColumn.Items.Add(reader[klic.PKColumn].ToString());
}
}
c.Close();
rootDataView.Columns.Insert(indexOfpKeyCol, cbColumn);
}
rootDataView.Refresh();
我对其他10个表使用相同的确切代码,除此之外没有任何问题。
CREATE TABLE [dbo].[curveRate](
[ID] [int] IDENTITY(1,1) NOT NULL,
[workStatus] [nvarchar](50) NOT NULL,
[goal] [float] NOT NULL,
[timeFrom] [datetime] NULL,
[timeTo] [datetime] NULL,
[costCenter] [nvarchar](50) NOT NULL,
[name] [nvarchar](50) NULL,
CONSTRAINT [PK_curveRate] PRIMARY KEY CLUSTERED (
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
外键位于workStatus和costCenter上。不工作的是workStatus,这很奇怪,因为我在其他表中使用workStatus并且它有效。我100%确定数据类型都是nvarchar(50)并且它们匹配。
当我逐步调试它时,我每行都会收到错误
DataGridViewComboBoxCell值无效。
加载DGV后,来自costCenter列的组合框被填充,但workStatus则没有。我的代码或数据库设计失败了吗?