- PR -

DataTable:入力された値で該当行取得するには?

1
投稿者投稿内容
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2003-03-24 19:25
こんばんわ。
VB.NETでWindowsアプリケーション開発の練習中です。

フォームにあるテキストボックスに入力された番号に該当するものを削除。
という処理をしたいのですが、該当する行の抜き出し。というとこで躓いています。

流れとしては、

テキストボックスの入力番号がない
 エラー処理
ある
 その番号の値をもつレコード行を取得
 該当するレコード行を削除。

というものなのですが

dataset.Table("T_Test").Rows(該当レコード).Delete()
として削除しようと思うのですが、該当レコードを取得する方法がわかりません。
DataGridであれば、クリックされたセルの列と行を抜き出せるのですが
DataGridなしの場合はどうすればいいのでしょうか?
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2003-03-24 19:53
追記です。
DataGridをフォームで使用し、クリックされた行を削除する場合の処理は

Dim rc As Integer

rc = DataGrid1.CurrentCell.RowNumber

DataSet.Tables("T_Name").Rows(rc).Delete()

で、問題なく処理されました。

今回の場合は削除したい行をテキストボックスより入力して実行ということなのですが

テキストボックスに入力された数値をテーブルの全レコードから探し出してそのレコード行番号を取得するということはできないのでしょうか?
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-03-24 19:53
例えばSelectメソッドを利用する方法があります。
コード:
Dim rows As DataRow() = dataSet1.Tables("Employees").Select(String.Format("FirstName Like '%{0}%'", TextBox1.Text))
If (rows.Length = 1) Then rows(0).Delete()


KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2003-03-25 12:04
NothingBut.NETFXさん、いつもありがとうございます。

Selectメソッドについて理解が不足しているので
しっかり調べてから試させていただきます。
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2003-03-25 17:57
Selectメソッドについて調べてみましたが、配列を抜き出す。という解釈で問題ないのでしょうか?
ソースを参考に試してみましたが、デバッグするとなぜかTextBox1.Textの値が途中で消えてしまい、うまく動作させることができませんでした。

それでもう一度自分なり、考え直してみたところ、以下の方法でなんとか思い通りの動作はできるようになりました。

DataGridを使った場合は

DataSet.Tables("T_Name").Rows(DataGrid1.CurrentCell.RowNumber).Delete()

ということなので、なんとかRows(int)に該当レコードの行番号さえ入れることができれば・・・。
と言った感じで考えていき、結果として下記のようにすれば思い通りにできました。

===============================================================================
Dim r As DataRow
Dim dLgRet As DialogResult
Dim dr As Integer

DataView1.Sort = "Num"
dr = DataView1.Find(TextBox1.Text)
r = DStest1.Tables("DGrid").Rows.Find(TextBox1.Text)

If Not r Is Nothing Then
 dLgRet = MessageBox.Show("削除しますか?", "レコード削除", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

 Select Case dLgRet
  Case DialogResult.Yes
   DStest1.Tables("DGrid").Rows(dr).Delete()
   OleDbDataAdapter1.Update(DStest1, "DGrid")
   DStest1.Clear()
   OleDbDataAdapter1.Fill(DStest1)
  Case DialogResult.No
 End Select
Else
 MessageBox.Show("削除するレコードが見つかりません。")
 Return
End If
===============================================================================

DataViewを使うことで以上のように該当レコードを検索することができたので
なんとか思い通りにすることができました。
1

スキルアップ/キャリアアップ(JOB@IT)