DataGridView_DefaultValuesNeeded not assigning values
本文关键字:assigning values not DefaultValuesNeeded DataGridView | 更新日期: 2023-09-27 18:17:12
我有一个DataGridView被填充从SQL数据库(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"单元格仍将为空,"Active"将为真,"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表一旦用户点击保存按钮
仍然不确定到底发生了什么,但行为现在是正确的。我加了
dt.Columns["kitChartId"].AllowDBNull = true;
dt.Columns["kitChartId"].AutoIncrement = false;
在dt.Load(dr);
和display.DataSource = dt;
之间
我从DefaultValuesNeeded处理程序中删除了e.Row.Cells["ID"].Value = "";
,因为没有自动增量,它默认为null或空字符串,这适合我的保存功能。