我有一个从SQL数据库填充的DataGridView(我相信2005)。当用户单击视图底部的空新行时,我想默认某些值。我使用DefaultValuesNeeded事件来执行此操作,但并不总是分配值。
例如,如果我使用以下代码,
private void dgvCharts_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
e.Row.Cells["ID"].Value = "";
e.Row.Cells["Active"].Value = true;
e.Row.Cells["ChartType"].Value = cboChartTypes.Items[0];
}
处理程序触发后,“ID”单元格仍为null,“Active”将为true,“ChartType”将具有正确的值(“ChartType”为组合框列,cboChartTypes为我创建的组合框它的模板)。另一方面,如果我将“ID”移到底部,则在完成事件后所有3都为空。如果我完全删除ID分配,则相同。
我检查过没有一行是只读的。但对于我的生活,没有理由从失败的任务开始应该影响如何/如果分配其他人。有谁能解释一下?我该如何纠正呢?
编辑: 以下是将查询绑定到datagridview的代码。
string qSelect = "SELECT kitChartId,Active,ChartName,ChartType,RetireDate FROM kit_charts INNER JOIN charts on kit_charts.chart = charts.chartId where kit = @kit";
SqlCommand selectCmd = new SqlCommand(qSelect);
using(SqlConnection conn = new SqlConnection(connectionString))
{
conn.open();
selectCmd.Connection = conn;
using(SqlDataReader dr = selectCmd.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(dr);
display.DataSource = dt;
display.Refresh();
}
}
当一个新行被添加到datagridview时,我想在用户点击保存按钮后向kit_charts表添加一行。
答案 0 :(得分:0)
仍然不确定究竟发生了什么,但行为现在是正确的。我添加了
dt.Columns["kitChartId"].AllowDBNull = true;
dt.Columns["kitChartId"].AutoIncrement = false;
在dt.Load(dr);
和display.DataSource = dt;
之间
我从DefaultValuesNeeded处理程序中删除了e.Row.Cells["ID"].Value = "";
,因为没有自动增量,它默认为null或空字符串,这适合我的保存功能。