tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSelectedRowsの内容
記事No10611
投稿日: 2011/11/15(Tue) 12:22
投稿者hoido
いつもお世話になっております

For Each r As DataGridViewRow In Me.dgv_Data.SelectedRows
   Me.dgv_Data.Item("品名", r.Index).Value = inputText
Next r

早速ですが、上記コードで実行すると選択行以外にデータが入力される場合があります。
品名列でソート状態の場合に不具合がおきるようなのですが、回避方法がわかりません。
データをまとめて入力したいので出来ればソート状態で入力したいのですが、不具合回避方法はあるのでしょうか?
教えてください。

使用SOFT:VB2010Express

[ツリー表示へ]
タイトルRe: SelectedRowsの内容
記事No10612
投稿日: 2011/11/15(Tue) 12:52
投稿者shu
>    Me.dgv_Data.Item("品名", r.Index).Value = inputText
r.Cells("品名").Value = inputText

でどうですか?

[ツリー表示へ]
タイトルRe^2: SelectedRowsの内容
記事No10613
投稿日: 2011/11/15(Tue) 22:05
投稿者hoido
shu様回答有難うございました。
r.Cells("品名").Value = inputText
で試してみましたが、思ったとおりの結果になりませんでした。
申し訳ありませんが、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: SelectedRowsの内容
記事No10614
投稿日: 2011/11/15(Tue) 23:50
投稿者shu
品名でのソートで順番が変わっているだけでもともと選ばれていた行に
相当するところにはセットされているとか?

[ツリー表示へ]
タイトルRe: SelectedRowsの内容
記事No10615
投稿日: 2011/11/16(Wed) 03:30
投稿者魔界の仮面弁士
> 品名列でソート状態の場合に不具合がおきるようなのですが、回避方法がわかりません。

こんな感じでどうでしょうか。(未検証)

For Each selRow As DataGridViewRow In Me.DataGridView1.SelectedRows
    Dim rowView = TryCast(selRow.DataBoundItem, DataRowView)
    If rowView IsNot Nothing Then
        Dim row As DataRow = rowView.Row
        row("項目名") = 値
    End If
Next

[ツリー表示へ]
タイトルRe^2: SelectedRowsの内容
記事No10616
投稿日: 2011/11/16(Wed) 08:38
投稿者hoido
shu様、魔界の仮面弁士様回答ありがとうございました。
魔界の仮面弁士様のコードでトライしましたがやはりダメでした。

私もいろいろ検索したところ、
http://blog.livedoor.jp/akf0/archives/51399960.html
を見つけ参考にしたところうまくいきました。

'整列のため、SelectedRowsの格納順を取得する
   Dim SortList() As Integer
   ReDim SortList(Me.dgv_Data.SelectedRows.Count - 1)
   Dim idx As Integer = 0
       For Each row As DataGridViewRow In Me.dgv_Data.SelectedRows
           SortList(idx) = row.Index
           idx += 1
       Next
     Array.Sort(SortList)
       For Each sortno As Integer In SortList
           Me.dgv_Data.Item("品名", sortno).Value = inputText
       Next

いまいちなぜうまくいったのか、今までのコードと何が違うのかわからないのが不安ですが、
一応このコードでしばらく様子を見てみようと思います。
SelectedRowsはリアルタイムの入力ではなく一旦変数に入力するのが基本なのでしょうか?
皆様ありがとうございました。

[ツリー表示へ]