DataGridViewにFilterをかけたときの再描画 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 (削除されました)  ()
投稿日時
2010/7/5 02:22:48
(削除されました)
投稿者 hoido  (社会人)
投稿日時
2010/7/5 01:13:04
魔界の仮面弁士様回答ありがとうございます。
>DataGridViewEx というのは、どのようなクラスなのでしょうか。
http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
上記を参考にさせて頂き、DataGridViewでEnterを押したとき隣のセルに移動するようにしていました。
>DataSource を BindingSource 経由で渡すようにし、Filter はその BindingSource に割り当ててみては如何でしょう。
まだやってみたことがなかったので、勉強して挑戦してみます。
ありがとうございました。
>DataGridViewEx というのは、どのようなクラスなのでしょうか。
http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html
上記を参考にさせて頂き、DataGridViewでEnterを押したとき隣のセルに移動するようにしていました。
>DataSource を BindingSource 経由で渡すようにし、Filter はその BindingSource に割り当ててみては如何でしょう。
まだやってみたことがなかったので、勉強して挑戦してみます。
ありがとうございました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/7/4 12:26:23
> それぞれのページにDataGridViewExが1個配置されており
DataGridViewEx というのは、どのようなクラスなのでしょうか。
System.Windows.Forms.DataGridView クラスと何か関係がありますか?
(タイトルは、DataGridView になっていますが…)
> Filterはちゃんとかかっているようです。
変更通知イベント/メソッドの無いオブジェクトが DataSource に渡されているのかも知れません。
DataSource を BindingSource 経由で渡すようにし、Filter はその BindingSource に
割り当ててみては如何でしょう。
DataGridViewEx というのは、どのようなクラスなのでしょうか。
System.Windows.Forms.DataGridView クラスと何か関係がありますか?
(タイトルは、DataGridView になっていますが…)
> Filterはちゃんとかかっているようです。
変更通知イベント/メソッドの無いオブジェクトが DataSource に渡されているのかも知れません。
DataSource を BindingSource 経由で渡すようにし、Filter はその BindingSource に
割り当ててみては如何でしょう。
投稿者 hoido  (社会人)
投稿日時
2010/7/3 09:58:07
いつもお世話になっております。
早速ですが、現在フォーム上にTabControlが3個
それぞれのページにDataGridViewExが1個配置されており、DataGridViewExが合計13個配置されています。
すべてのDataGridViewExにFilterをかけているのですがFilter実行時表示が更新されているものもあれば更新されていないものあります。
ただ、実際FilterがかかっていないかというとDataGridViewExを選択すると正常に表示されるのでFilterはちゃんとかかっているようです。
現在のプログラムは下記の通りで、フォーム上からTabControlを検索し、見つかればそのPage内にDataGridViewExがあるかどうか検索。その後入力日等でFilterをかけています。
Private Sub DataGridFilter()
Dim SelectDgv As String = ""
For Each oDgv In Me.Controls
If oDgv.GetType Is GetType(TabControl) Then '--TabControlの検索
For Each ooDgv In CType(oDgv, TabControl).Controls
If ooDgv.GetType Is GetType(TabPage) Then '--TabPageの検索
For Each oooDgv In CType(ooDgv, TabPage).Controls
If oooDgv.GetType Is GetType(DataGridViewEx) Then '--DataGridViewExの検索
SelectDgv = Replace(CType(ooDgv, TabPage).Name, "Tab_", "")
'▼選択日でフィルターをかける
If CType(oooDgv, DataGridViewEx).Name = "dgv_" & SelectDgv Then
Dim Table As DataTable = DirectCast(CType(oooDgv, DataGridViewEx).DataSource, DataTable)
Dim View As DataView = Table.DefaultView
Select Case CStr(CType(oooDgv, DataGridViewEx).Tag)
Case "職場1"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 職場ID ='" & CInt(Me.cbo_在籍職場.SelectedValue) & "' AND 社員ID ='" & CInt(Me.cbo_社員名.SelectedValue) & "'"
Case "職場2"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 職場ID ='" & CInt(Me.cbo_在籍職場.SelectedValue) & "'"
Case "仕事"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 仕事内容ID ='" & CInt(Me.cbo_仕事内容.SelectedValue) & "'"
Case Else
View.RowFilter = "入力日 =#" & SelectDay & "# AND 仕事内容ID ='" & CInt(Me.cbo_仕事内容.SelectedValue) & "' AND 社員ID ='" & CInt(Me.cbo_社員名.SelectedValue) & "'"
End Select
Table.Dispose()
End If
End If
Next
End If
Next
End If
Next
End Sub
Refreshも試してみましたがダメでした。
Filter実行時の再描画の良い方法はありませんか?
よろしくお願いいたします。
早速ですが、現在フォーム上にTabControlが3個
それぞれのページにDataGridViewExが1個配置されており、DataGridViewExが合計13個配置されています。
すべてのDataGridViewExにFilterをかけているのですがFilter実行時表示が更新されているものもあれば更新されていないものあります。
ただ、実際FilterがかかっていないかというとDataGridViewExを選択すると正常に表示されるのでFilterはちゃんとかかっているようです。
現在のプログラムは下記の通りで、フォーム上からTabControlを検索し、見つかればそのPage内にDataGridViewExがあるかどうか検索。その後入力日等でFilterをかけています。
Private Sub DataGridFilter()
Dim SelectDgv As String = ""
For Each oDgv In Me.Controls
If oDgv.GetType Is GetType(TabControl) Then '--TabControlの検索
For Each ooDgv In CType(oDgv, TabControl).Controls
If ooDgv.GetType Is GetType(TabPage) Then '--TabPageの検索
For Each oooDgv In CType(ooDgv, TabPage).Controls
If oooDgv.GetType Is GetType(DataGridViewEx) Then '--DataGridViewExの検索
SelectDgv = Replace(CType(ooDgv, TabPage).Name, "Tab_", "")
'▼選択日でフィルターをかける
If CType(oooDgv, DataGridViewEx).Name = "dgv_" & SelectDgv Then
Dim Table As DataTable = DirectCast(CType(oooDgv, DataGridViewEx).DataSource, DataTable)
Dim View As DataView = Table.DefaultView
Select Case CStr(CType(oooDgv, DataGridViewEx).Tag)
Case "職場1"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 職場ID ='" & CInt(Me.cbo_在籍職場.SelectedValue) & "' AND 社員ID ='" & CInt(Me.cbo_社員名.SelectedValue) & "'"
Case "職場2"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 職場ID ='" & CInt(Me.cbo_在籍職場.SelectedValue) & "'"
Case "仕事"
View.RowFilter = "入力日 =#" & SelectDay & "# AND 仕事内容ID ='" & CInt(Me.cbo_仕事内容.SelectedValue) & "'"
Case Else
View.RowFilter = "入力日 =#" & SelectDay & "# AND 仕事内容ID ='" & CInt(Me.cbo_仕事内容.SelectedValue) & "' AND 社員ID ='" & CInt(Me.cbo_社員名.SelectedValue) & "'"
End Select
Table.Dispose()
End If
End If
Next
End If
Next
End If
Next
End Sub
Refreshも試してみましたがダメでした。
Filter実行時の再描画の良い方法はありませんか?
よろしくお願いいたします。