我三流

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

Npgsql ExecuteScalarメソッドを使用してみました

入力値をチェックする方法にもいろいろな方法があると思いますが
今回は、データグリッドビューに値を入力する際にマスタテーブルに
登録されたIDを参照して、マスタにIDがあればエラーメッセージを表示し
入力をキャンセル、無ければ登録するという仕組みのもの。

あとから、「マスタに登録したIDが間違っていた!」なんていう場合は
とりあえず、マスタからIDを削除してから、入力しなおすことにすれば
いいかっていう、かなり柔軟な設計(w。

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{

	DataGridView dgv = (DataGridView)sender;
	
	if (!dgv.IsCurrentCellDirty) return;
	
	if (dgv.Columns[e.ColumnIndex].Name == "id")
	{
		try
		{
		
			da.SelectCommand = new NpgsqlCommand
			(
				"select"
				+ " id"
				+ " from"
				+ " duplicate_view"
				+ " where id=:id",
			m_conn
			);
			da.SelectCommand.Parameters.AddWithValue("id", e.FormattedValue.ToString());
			
			da.Fill(dupds, "duplicate_view");
			
			m_conn.Open();
			
			object dup_id;
			                            
			dup_id = da.SelectCommand.ExecuteScalar();
			                            
                        if (dup_id != null)
                        {
                            MessageBox.Show("その「id」= " + dup_id.ToString() + "は、リタイヤ済みです!"
                                    , "リタイヤ済み", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            //キャンセルする
                            e.Cancel = true;
                            //入力した値をキャンセルして元に戻す
                            dgv.CancelEdit();
                        }
		}
	
		finally
		{
			m_conn.Close();
		}
	}
}

もっと、いい方法があれば教えてください。