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

データグリッドで選択されたIDを削除

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


VB データグリッドビューについて。


1つお聞きしたいことがあります。

SQL.CommandText = "SELECT mem_id,mem_name,mem_kana,mem_sex FROM tbl_Member"
省略していますが、VBを使用しDBに接続SQL文でDBから情報取得
Adapter.SelectCommand = SQL

Adapter.Fill(Table)

DataGridView1.DataSource = Table
データグリッドで表示

ここで質問があります、グリッド自体で選択された行をDBごと削除するにはどのようにしたらできるのでしょうか?
自分ではmem_id(プライマリーキー)を取得しSQL文を使用して削除しえばできるとおもうのですが
コードがまったく思いつきません。
まずは、行を選択したときに、mem_idの取得がしたい
その次に削除。
どなたかわかる方ご教授お願いします。
■No23527に返信(vb初心者さんの記事)
> VB データグリッドビューについて。
> ここで質問があります、グリッド自体で選択された行をDBごと削除するにはどのようにしたらできるのでしょうか?

「RowState」をキーワードに検索するといいかも。

DataSourceにてバインドされている場合、行削除すると
DataTable上のRowStateがDeletedになります。

RowStateがDeletedになっているのを削除するなどといった方式となります。
RowStateがDeletedの内容を読むには、Originalにする必要がありますね。

変更点のデータベースへの反映
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm
やじゅ様お返事ありがとうございます。

検索しましたが力不足でしょうかまったく意味がわかりません。

知り合いに聞いた話だと、Itemを使用してプライマリーキーを取得して
デリート文に突っ込めばできると聞いたんですが、間違っているのでしようか?

まるっと1日悩んでますがまったく理解ができない状態で・・・・。


グリッドで選択された行の値の取得について教えてもらえないでしょうか?
よろしくお願いします。
■No23534に返信(vb初心者さんの記事)
>
>
> グリッドで選択された行の値の取得について教えてもらえないでしょうか?
> よろしくお願いします。

値の取得は
I = DataGridView1.CurrentRow.Index
Dim S As String = DataGridView1.Rows(I).Cells(J).Value.ToString()
Jにはcolumnのインデックスを入れます。

データを消す場合には
DataSetを更新

DataAdapter.DeleteCommandにSQLを入れる

DataAdapter.Update()でデータベースを更新

かな。間違ってたらごめんね〜(>_<)
■No23535に返信(kou-kouさんの記事)
> ■No23534に返信(vb初心者さんの記事)


お返事ありがとうございました。

すみませんがデータセットは使っていないんですが。
データセットを使用せずにはできないってことなのでしょうか?
■No23536に返信(vb初心者さんの記事)
> ■No23535に返信(kou-kouさんの記事)
>>■No23534に返信(vb初心者さんの記事)
>
>
> お返事ありがとうございました。
>
> すみませんがデータセットは使っていないんですが。
> データセットを使用せずにはできないってことなのでしょうか?

あ、DataTable使ってるんですか?
そしたらDataTableを更新して、
後は上記の様にselectcommand、updateで更新されませんか??
それとすみません、上記で間違ってタメ口で喋ってしまいましたm(_ _)m
>あ、DataTable使ってるんですか?
>そしたらDataTableを更新して、
>後は上記の様にselectcommand、updateで更新されませんか??

でできるのでしょうか?
グリッドで選択された行の値(プライマリーキー)を取得したいんですが・・・
取得したあとにデリート文で組めばできるかと思ったんですが・・・

勉強不足なので何をやられてるのかわかりません。
■No23540に返信(kou-kouさんの記事)

ため口はきにしませんよw
■No23542に返信(vb初心者さんの記事)
> ■No23540に返信(kou-kouさんの記事)
>
> ため口はきにしませんよw

自分でビックリしました・・・(笑)
上記の値の取得、で書いたIとJに取得したいセルのインデックスを入れます。
コレでSにセルの値が入りますから。
更新方法は分かりました??
■No23543に返信(kou-kouさんの記事)

セレクトコマンドとはSQL文のことなんでしょうか?
SQL文で値を取得ということになるのでしょうか?
それであればどのようにグリッドで選択されたときにとSQL文で書けばいいのでしょうか?
教えてもらえますと助かります。
■No23545に返信(vb初心者さんの記事)
> ■No23543に返信(kou-kouさんの記事)
>
> セレクトコマンドとはSQL文のことなんでしょうか?
> SQL文で値を取得ということになるのでしょうか?
> それであればどのようにグリッドで選択されたときにとSQL文で書けばいいのでしょうか?
> 教えてもらえますと助かります。

すみません、selectcommandでは無くてdeletecommandでしたm(_ _)m
簡単なサンプルを載せておきます。
0は適当に読み替えて下さい。

 Dim D As DataTable = 使うテーブル
Dim S As String = dgvMain.CurrentRow.Cells(0).ToString 'プライマリキー
D.Rows(0).Delete()
DA.DeleteCommand.CommandText = "delete from テーブル名 where 条件文"
DA.Update(D)

.NETのデータベースはややこしいので、掲示板だけでは分からないかも知れません。書籍で一貫した勉強をされた方がいいかも知れません(>_<)
非常に良い雰囲気の中、水をさすようで恐縮なのですが、管理人として2点ほど指摘させてください。

まず、「vb初心者」というお名前ですが、匿名と同じと判断されますので、ルール違反になってしまいます。次回からはお名前を変えていただけますように、お願いします。

また、kou-kouさんが気にされたタメ口についてですが、これもルール違反になってしまいます(ただし、この程度ならば、ルール違反とは判断しません)。それは、vb初心者さんが気にするかしないかにかかわらずです。多分kou-kouさんはそのことをご存知だったので気にされたと思いますので、私が指摘する必要もありませんが、他の方が勘違いをされないように指摘させていただきました。

以上2点について、ご不明の場合は、「書き込みのルールについて」をご覧ください。

http://dobon.net/vb/bbs/index.html
管理人様

申し訳ありませんでした。
もう1度ルールを確認しました。
今後気をつけたいとおもいます。


kou-kou様

送れてしまい申し訳ありませんでした。
1度書いていただいたソースを試してみたいと思います。
また、本は持ってるんですがどこを見ればいいのか解らないので今は使用して
おりません。
もう1度目を通して見たいと思います。
またわからないことがあればお聞きしたいと思います。
■No23550に返信(vb初心者さんの記事)
> 管理人様
>
> 申し訳ありませんでした。
> もう1度ルールを確認しました。
> 今後気をつけたいとおもいます。
>
>
> kou-kou様
>
> 送れてしまい申し訳ありませんでした。
> 1度書いていただいたソースを試してみたいと思います。



> また、本は持ってるんですがどこを見ればいいのか解らないので今は使用して
> おりません。
> もう1度目を通して見たいと思います。
> またわからないことがあればお聞きしたいと思います。
>

管理人様
声を掛けて頂きありがとうございました。
ネットへの書き込みにまだ慣れず、不安に思っておりました。
これからも勉強させて頂きますm(_ _)m

vb初心者様
文を間違ったりして混乱させてしまい、すみませんでしたm(_ _)m
こちらこそ勉強になり、ありがとうございました☆
あと少し思ったのですが、
情報を得た時にご自分でプログラムを実行して試されてますか?
もしされて無いようでしたら、まず御自分で試してみる事をお勧めします☆
やはり自分でやってみない事には理解は難しいと思いますので(>_<)
では失礼しますm(_ _)m
自分の考えとしては
Itemを使用して列の指定はそのまま行の指定だけ手動でできるCurrentRowをItemの()の中にいれてあげればできるのかと思っていましたが。
力不足でしょうか・・・できませんでした。

kou-kou-様の書いてある構文の中で
Dim S As String = dgvMain.CurrentRow.Cells(0).ToString 'プライマリキー
がありこれを使用すれば列、行の取得ができましたが、これでは”S”はストリングなのでデリーと文を走らせたときにエラーがでます。
ストリングをインテジャーに変えればできるかとおもいます。
少しお尋ねしたいことがあります。
DA.DeleteCommand.CommandText = "delete from テーブル名 where 条件文"
DA.Update(D)

に書いてありますDAというのは何でしょうか・・・
教えてもらえますと助かります。
質問ばかりで申し訳ありません。
■No23556に返信(vb初心者さんの記事)
> 自分の考えとしては
> Itemを使用して列の指定はそのまま行の指定だけ手動でできるCurrentRowをItemの()の中にいれてあげればできるのかと思っていましたが。
> 力不足でしょうか・・・できませんでした。
>
> kou-kou-様の書いてある構文の中で
> Dim S As String = dgvMain.CurrentRow.Cells(0).ToString 'プライマリキー
> がありこれを使用すれば列、行の取得ができましたが、これでは”S”はストリングなのでデリーと文を走らせたときにエラーがでます。
> ストリングをインテジャーに変えればできるかとおもいます。
> 少しお尋ねしたいことがあります。
> DA.DeleteCommand.CommandText = "delete from テーブル名 where 条件文"
> DA.Update(D)
>
> に書いてありますDAというのは何でしょうか・・・
> 教えてもらえますと助かります。
> 質問ばかりで申し訳ありません。
>

すいません、焦って書いたから抜けてましたm(_ _)m
正しくは
Dim S As String = DataGridView1.CurrentRow.Cells(0).Value.ToString()
です。valueが抜けていたので、エラー原因は型ではないと思います(>_<)
キチンと確認していませんでした、すみませんm(_ _)m

DAはDataAdapterです☆
無事プログラムを作成することができました。
kou-kou-様のコードをベースにして
Dim rows As Integer
'選択されている行の取得
For Each r As DataGridViewRow In DataGridView1.SelectedRows
'変数に格納
rows = r.Index
Next r

'DataGridView1(横の列, たての行).Value の取得
Dim S As String = DataGridView1(0, rows).Value
これで値の取得ができました。
後は変数SをSQL文(デリーと文)で実行すればできました!
色々とお世話になり、やさしく教えていただきありがとうございました。
解決したのでチェックいれます。
解決済み!

> DAはDataAdapterです☆

なるほど。
勉強になります。
kou-kou-様のコードでも今から試してみたいとおもいます。
プログラムはおくが深い。
1つのコードが正解ではなく色々とやり方はあるんですね・・・。

なるほど、勉強になりました。
kou-kou-様ご教授本当にありがとうございました。
解決済み!
2008/12/12(Fri) 13:12:19 編集(投稿者)

■No23559に返信(vb初心者さんの記事)
>
>>DAはDataAdapterです☆
>
> なるほど。
> 勉強になります。
> kou-kou-様のコードでも今から試してみたいとおもいます。
> プログラムはおくが深い。
> 1つのコードが正解ではなく色々とやり方はあるんですね・・・。
>
> なるほど、勉強になりました。
> kou-kou-様ご教授本当にありがとうございました。

いえ、こちらこそ勉強になりました☆
僕は普段からチョイミス多いから気を付けないと・・・(笑)
流れを理解されて御自分のコードで書かれていたので、
一番いい結果になって良かったです♪
こちらこそありがとうございました(>_<)

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