- - PR -
DataTableとDataViewの行インデックスについて
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-26 13:57
DataViewでRowFilterをセットしたデータの行インデックスが、
DataTableのどの行インデックスにあたるか、 また、逆にDataTableの行インデックスからDataViewのどの行インデックス あたるかを知りたいと思います。 取得方法をご存知の方がいらっしゃいましたらご教示ください。 よろしくお願いします。 [ メッセージ編集済み 編集者: SNMODU 編集日時 2007-11-26 13:58 ] | ||||||||||||||||||||
|
投稿日時: 2007-11-27 09:22
DataTable.Find(object[] key)
DataView.Find(object[] key) 前者については、自動採番を行うダミー列をDataTableに追加し、ダミー列の値 = 行番号となるようにすると、もっと楽できるかもしれない。 途中に行を追加されたり、ソート順を変更されると破綻するけど。 | ||||||||||||||||||||
|
投稿日時: 2007-11-27 10:26
かずくんさんレスありがとうございます。
Findメソッドについては、まったく同一のデータが存在する場合があるため残念ながら使用できないのです。 ダミー列については、かずさんのおっしゃられている通りに、最悪そのようにするするしかないかなと考えておりました。 DBはORACLEなのですが、データテーブルには、SELECT発行されたデータが格納されます。 SELECTにROWNUMを付加して行番号を付加し、行が新たに追加された場合は、行数+1で行番号をセットしようかと思っています。 ただ、すべてのSELECT文にROWNUMを追加するのはあまりスマートではないような気がしているところです。 DataTableとDataViewに紐づきがあるのではないかと思い、用意されているメッソドやプロパティで解決できるのかと調べましたが、いまだに不明です。そろそろ、妥協しようかと思っています。。。 | ||||||||||||||||||||
|
投稿日時: 2007-11-27 12:32
主キーを並べ替えキーとして、DataView.Findを呼べば、重複なく取れそうな気がするけど、だめかねぇ?
ADO.netの自動採番を使用してみては? たぶんDataTable.AutoIncrement | ||||||||||||||||||||
|
投稿日時: 2007-11-27 14:31
主キーが設定できないデータなので使用できないのです。
ちょうど自動採番するものを探していました。 早速、試してみたところ、 DataTable.Columns.AutoIncrementで自動採番し行番号を付加することができました。 この行番号でDataTableとDataViewの紐付けを行いたいと思います。 はじめての書き込みだったのでドキドキしてしまいました。 かずくんさん。ご親切に教えていただきありがとうございました。 [ メッセージ編集済み 編集者: SNMODU 編集日時 2007-11-27 14:33 ] | ||||||||||||||||||||
|
投稿日時: 2007-11-27 15:15
だけであれば、DataRowView.Row プロパティが使えるかな?と思いましたが
となると、やはりかずくんが書かれているような自動採番を使うのが一番手っ取り早い かもしれないですね。 # 自分ではあまり DataRow から DataRowView を得ることはしませんが # (そのときはまた別途 DataView を作るかも) _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||||||||||
|
投稿日時: 2007-11-27 16:19
以下のようなコード(イメージ)になるのでしょうか?
これって、できますか? もしできるのなら、
で、取り出せるのかな? | ||||||||||||||||||||
|
投稿日時: 2007-11-27 16:53
そうですね。そんな感じです。 …っと書いて、行そのものではなく行インデックスが欲しいのだと言うことに 今頃気がつきました。とほほ。 流れから言って、PrimaryKey を設定することができないデータで、全く同じ データが存在するので(だから設定できない?)そこから作った DataView が どの行を指しているか(行そのものではなくインデックス)を知りたいという 話であった、と。 となるとやっぱり DataColumn.AutoIncrement が有用ですね。 なんか使えないツッコミをしてしまったような希ガス。反省。
んー。DataRow から DataRowView に変換することができなさそう。 別途 DataView を元テーブルから作ったとしても、それはそれで別の DataRowView になるので、IndexOf では見つからないわけですし。 ところで言語は C# で良かったんでしたっけ。何も書かれてなかったですけど。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 |