総舐めにしなくても、FindBy メソッド使えばええんや![プログラミング]
(2014-09-23 11:29:39) by shinoda


前にも書いたように、.NET 系の言語(VBとC#)でデータセットを使ってほげほげという開発経験がないので、日々発見の毎日である(^^;
データセットのメソッドやプロパティを全て理解しているわけではないので、あるメソッドを使えば簡単に解決することを、ロジックでごにょごにょしたり、まあ、そういう無駄がまだ多い(^^;
今の仕事の契約が切れる頃にバッチリになりそうで若干申し訳ないなと思いつつ(^^;;;

データテーブルの中の何件かのレコードのフラグを変更する・・・なんて処理で、例えば keys() という配列に対象レコードのキーが入っているとして、

For i = 0 To dt.Count - 1
For j = 0 To keys.Length - 1
If dt(i).id = keys(j) Then
dt(i).chkFlg = 1
Exit For
End If
Next
Next

なんて多重ループにしてたんだけど、レコード数が増えたら遅くなるわなあ・・・と(^^;
実は、こんな風にループして総舐めにしなくても、ちゃんと更新対象を指定できるメソッドが DataSet クラスにはある。

FindBy だ。(ただし、データセットできちんと主キーの設定がされていないと使えない)

ちゃんと主キーとして指定されている項目でレコードを絞り込める環境であれば、

For j = 0 To keys.Length - 1
Dim row As DataSet.hogeRow
row = dt.FindByid(keys(j))
row.chkFlg = 1
Next

という感じで組める。
これならループが1個で随分処理がシンプルになる。

メソッド知らなくても、こまめにググればええやんという話だが、最初はその余裕すらなかったわ(^^;

<追記>
ちなみに、主キー設定がなければ、Select メソッドで対象レコードを絞り込めばよし。
ただ、結果が配列で返ってくるなど、若干動きは変わってくるが。

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8