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表一旦用户点击保存按钮

DataGridView_DefaultValuesNeeded not assigning values

仍然不确定到底发生了什么,但行为现在是正确的。我加了

dt.Columns["kitChartId"].AllowDBNull = true;
dt.Columns["kitChartId"].AutoIncrement = false;

dt.Load(dr);display.DataSource = dt;之间

我从DefaultValuesNeeded处理程序中删除了e.Row.Cells["ID"].Value = "";,因为没有自动增量,它默认为null或空字符串,这适合我的保存功能。