DataGridView_DefaultValuesNeeded不分配值

时间:2015-10-09 23:21:26

标签: c# events datagridview

我有一个从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表添加一行。

1 个答案:

答案 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或空字符串,这适合我的保存功能。