- - PR -
DataGridVewでデータバインディングしている時、主キー、ユニークの重複チェックについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-05 19:20
DataViewのRowFilterを使うことでフィルタがかかり表示に影響すると
言うことでしょうか? 今のロジックはRowFilterを設定して確認した後RowFilterにnullを代入して 解除しています。これで動作は問題ないと思っているんですけど これ以外にも表示に影響を及ぼす場合があるんですか? DataTable を元に DataView を作るというのはこんな感じ です(言語が書いていないのでC#で)。 と言うことはDataTableに変更があればDataViewも更新する必要がある と言うことですよね。これだとDataTableとDataViewの同期漏れが起こる 可能性が高いような気もするんですが・・・?どうなんでしょう? | ||||
|
投稿日時: 2007-12-05 20:00
どうなんでしょう?と聞く前に、試してみれば、結論は出るんじゃないの。 1つのDataTableに対して、RowFilterの異なる、2つDataViewをつくる。 FormにDataGridViewを2つ貼り、各々のDataViewをDataSourceとして割り当てる。 DataTableに対し、レコードを追加・変更・削除して、反応を見る。 そんな、ミニマムコードを作ってみたら。 予想はついてるけど、結果どうなったか、教えてね。 | ||||
|
投稿日時: 2007-12-06 08:37
おお、なんかかずくんからナイスフォローが 確かにこれぐらいのことであれば、自分で検証してみるのが一番早いんですよね。 僕も気になったので、ちょっと調べてみました。 僕の場合、前に作った DataTable を DataSource にした DataGridView があったので もう1個 DataGridView を作って、その DataSource を元の DataTable から作った DataView にしてみました。 そしてそれぞれの内容を変更して結果を見る、という感じで。 自分では予想通りになりましたが、せっかくなので結果がどうなったか調べて教えて ください>キキーヌさん _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-12-06 13:27
試してみました!!
DataGridViewを3つ作成して以下のコードを書きました private void Form1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("a"); dt.Columns.Add("b"); dt.Columns.Add("c"); dt.Rows.Add(new object[] { 1, 2, 3 }); dt.Rows.Add(new object[] { 4, 5, 6 }); dt.Rows.Add(new object[] { 7, 8, 9 }); DataView dv1 = new DataView(dt); DataView dv2 = new DataView(dt); dv1.RowFilter = "a = 1"; dataGridView1.DataSource = dv1; dv2.RowFilter = "b = 8"; dataGridView2.DataSource = dv2; dataGridView3.DataSource = dt; } 結果ですが。 dv1、dv2にデータを(DataGridViewから)追加するとRowFilterの 条件に合うものは表示されますが 条件に合わないデータは表示されませんでした。 でもdtにはデータは追加されていました これは、追加、変更、削除についても同じ結果になりました。 問題の同期漏れですが、DataView dv1 = new DataView(dt); このように作成すると同期しないと思ってましたがきちんと同期してました。 dtに変更を加えるとdv1,dv2も影響するのを確認しました。 また、逆にdv1,dv2に変更を加えるとdtにも変更があるのを確認しました。 さて、ぱぴ王子さんの 「DataTable を DataGridView の DataSource として使っている場合など 元の DataTable の表示に影響を及ぼす場合があります。 」 これは DataView を DataGridView の DataSource として使っている場合は 表示に影響があるのはわかるんですが、DataSourceにDataTableを指定 していても影響はないような気がするんですが・・・。 | ||||
|
投稿日時: 2007-12-06 14:01
えーと、ぱぴ王子です ○| ̄|_
では、dt.DefaultView.RowFilter を設定するコードを追加してみてください。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-12-06 14:40
すいません…。
dt.DefaultView.RowFilterに設定すると表示に影響がありました。 DataViewばっかりに目がいって肝心のdt.DefaultView.RowFilterの ことをすっかり忘れてました。 申し訳ないです。 無事解決したのでこの問題は終了とします 未熟者のキキーヌに長々とお付き合いありがとうございました。 |