DataGridViewでDBのデータを操作する場合で、オートインクリメント列以外で
規定値で自動採番したいという要求がある場合。
下記の例の場合は、新規レコードには現在のレコード数+1の値が入る。
private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
da.SelectCommand = new NpgsqlCommand
(
"select"
+ " id"
+ " from"
+ " tbl"
+ " where n_id=:n_id",
m_conn
);
if (cmb_n_id.SelectedItem == null)
{
da.SelectCommand.Parameters.Add(new NpgsqlParameter("n_id",
NpgsqlTypes.NpgsqlDbType.Integer, 0, "n_id",
ParameterDirection.Input, false, 0, 0, DataRowVersion.Current,
DBNull.Value));
}
else
{
DataRowView row = (DataRowView)cmb_n_id.SelectedItem;
da.SelectCommand.Parameters.AddWithValue("n_id", row["n_id"]);
}
if (Cntds.Tables["tbl"] != null)
Cntds.Tables["tbl"].Clear();
da.Fill(Cntds, "tbl");
if (0 != Cntds.Tables["tbl"].Rows.Count)
{
//e.Row.Cells["id"].Value = Cntds.Tables["tbl"].Rows.Count + 1;
dataGridView1.Rows[e.Row.Index].Cells["id"].Value = e.Row.Index + 1;
}
}