DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でデータテーブルにプライマリーキー設定

環境/言語:[Windows7]
分類:[.NET]

こんにちは、はじめまして。

C#でデータテーブルにプライマリーキーを設定したいと思います。
下記のコードはデータベースからデータを取得し、データテーブルに格納。それをデータグリッドビューで表示しています。

データグリッドビューではデータを入力することができると思いますが、このデータグリッドビューでプライマリーキーを設定して、プライマリーキーの列にデータを入力しなかったらエラーを出すといった処理をしたいです。どのように設定すればよいでしょうか?

よろしくお願いいたします。

//データベース接続文字列
private string ConnSetting;
//データテーブル
private DataTable DTable;
//データアダプター
private DataAdapter ADP;
private SqlConnection sqlConn;

private void LOAD_SOME(object sender, EventArgs e)
{
//データベース操作用オブジェクト作成
ConnSetting = データ;

sqlConn = new SqlConnection(ConnSetting);

//データ参照用 DataTable
DTable = new DataTable();
ADP = new DataAdapter("SELECT * FROM T", sqlConn);

//プライマリーキー設定
//↓どうかけばいいかわかりません
//PrimaryColumn[0] = DTable.Columns["XXXXXX"];
//DTable.PrimaryKey = PrimaryColumn;

//データグリッドビューにデータを表示
this.DGV.DataSource = DTable;
}
■No31933に返信(高木さんの記事)
> C#でデータテーブルにプライマリーキーを設定したいと思います。
> 下記のコードはデータベースからデータを取得し、データテーブルに格納。それをデータグリッドビューで表示しています。
>
> データグリッドビューではデータを入力することができると思いますが、このデータグリッドビューでプライマリーキーを設定して、プライマリーキーの列にデータを入力しなかったらエラーを出すといった処理をしたいです。どのように設定すればよいでしょうか?
>
> //データ参照用 DataTable
> DTable = new DataTable();
> ADP = new DataAdapter("SELECT * FROM T", sqlConn);
>
> //プライマリーキー設定
> //↓どうかけばいいかわかりません
> //PrimaryColumn[0] = DTable.Columns["XXXXXX"];
> //DTable.PrimaryKey = PrimaryColumn;
>
> //データグリッドビューにデータを表示
> this.DGV.DataSource = DTable;

C# datatable 主キー で検索すればいろいろ出てきますよ
例えば
http://msdn.microsoft.com/ja-jp/library/z24kefs8(v=vs.110).aspx
http://www1.yel.m-net.ne.jp/oss/Tips/ADO/Tips_01002.htm

単に表に主キーを定義しただけではデーターグリッドビューに列を追加した時
[行か列かが確定して DataRow に書き込む時か DataRow から値を取得する時か]に主キーの列で不正な値(DBNull)だと怒られるような気がします
しま様

ご回答ありがとうございました。お教え頂きましたmsdnのサイトが参考になりました。そして無事に実現させることができました。

最初は、下記でうまく動きませんでした。

//データグリッドビューにデータを表示
DTable.PrimaryKey = new DataColumn[] { DTable.Columns["○○"] };
this.DGV.DataSource = DTable;

逆にしたら、動くようになりました。考えれば当然なのですが^^;

//データグリッドビューにデータを表示
this.DGV.DataSource = DTable;
DTable.PrimaryKey = new DataColumn[] { DTable.Columns["○○"] };

DataGridViewにプライマリーキーに設定されている列を未入力で移動しようとしたら下記のようなメッセージが出ました。

DataGridViewで次の例外が発生しました。
System.Data.NoNullAlloweException:列'○○'にnullsを使用することはできません。
この既定のダイアログを置き換えるには、DataErrorイベントをハンドルしてください。

助かりました、ありがとうございます!

DOBON.NET | プログラミング道 | プログラミング掲示板