我三流

いろいろ自分なりにやってみたことを書いています

DataGridViewでインクリメント値を入力する

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;
            }
     
        }