tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルデータの更新結果をデータグリッドに反映したい
記事No10834
投稿日: 2012/06/14(Thu) 11:28
投稿者かっちゃん
いつも大変助かっております
また、よろしくお願いいたします

データの更新結果をデータグリッドに即、反映したい

下記のように "LibraryM" から データを"rsALibraryM"に抽出して、
同時にデータグリッド"dgdGrid"にも表示しております。

そのあとデータの更新を実施した結果を
データグリッド"dgdGrid"にも反映したいのですが
どのようなロジックを入れたらよいでしょうか

'■--------- データ表示 ------------------■
' コネクションセット
   wkCNN.ConnectionString = glstrCnpath
   wkCMD.Connection = wkCNN
   wkCNN.Open()

  'データソースで実行するSQL文の設定
   wkstrSql = "select *  from LibraryM ORDER BY Kubun Asc, Category Asc, keyword Asc, LibraryNa Asc"
   rsALibraryM = New ADODB.Recordset
   rsALibraryM.Open(wkstrSql, CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
   Dim wkAdp1 As New OleDb.OleDbDataAdapter(wkstrSql, wkCNN)
  'データを取得する
   wkAdp1.Fill(wkDS, "LibraryM")
   dgdGrid.Columns.Clear()
  'データグリッドに表示するデータソースを設定
   dgdGrid.DataSource = wkDS
   dgdGrid.DataMember = "LibraryM"

'■--------- データ更新 ------------------■
' 追加の時
   rsALibraryM.AddNew()
   With rsALibraryM
       .Fields("LibraryNa").Value = テキストボックス1
       .Fields("LibraryKna").Value = テキストボックス2
       .Fields("Kubun").Value = テキストボックス3
       .Fields("Category").Value = テキストボックス4
       .Fields("keyword").Value = テキストボックス5
       .Update()
   End With
' 削除の時
   rsALibraryM.Delete()

'■--------- データグリッドに反映 ------------------■
  ここにロジックを入れたい

苦労しております。お願いいたします



[ツリー表示へ]
タイトルRe: データの更新結果をデータグリッドに反映したい
記事No10835
投稿日: 2012/06/14(Thu) 14:46
投稿者オショウ
> データの更新結果をデータグリッドに即、反映したい

  ADO.NET 使っていないようだけど?

  SqlDependency だったかで更新を監視させれば、
  表示系と更新系を分離してプログラム作れるので
  楽してます。

  http://msdn.microsoft.com/ja-jp/library/62xk7953.aspx

※ プログラム的難易度は高いですが、一度ライブラリ化すれば
  汎用化できるので、自分用のDLL(クラス)作って多用し
  てます。因みに、SQL Server Expressでも動作しました。

以上。参考まで

[ツリー表示へ]
タイトルRe^2: データの更新結果をデータグリッドに反映したい
記事No10837
投稿日: 2012/06/15(Fri) 08:45
投稿者かっちゃん
> > データの更新結果をデータグリッドに即、反映したい
>
>   ADO.NET 使っていないようだけど?
>
>   SqlDependency だったかで更新を監視させれば、
>   表示系と更新系を分離してプログラム作れるので
>   楽してます。
>
>   http://msdn.microsoft.com/ja-jp/library/62xk7953.aspx
>
> ※ プログラム的難易度は高いですが、一度ライブラリ化すれば
>   汎用化できるので、自分用のDLL(クラス)作って多用し
>   てます。因みに、SQL Server Expressでも動作しました。
>
> 以上。参考まで

オショウ様
ありがとうございます。

今まで、VB6.0を使っており、今回初めてVS2010によるVBへ変換している最中です
現時点ではADO.NETがわからない状態です
自分用DLLを作成するために、どこをみたら理解しやすいでしょうか
よろしくお願いいたします   

[ツリー表示へ]
タイトルRe: データの更新結果をデータグリッドに反映したい
記事No10836
投稿日: 2012/06/14(Thu) 14:59
投稿者魔界の仮面弁士
> データの更新結果をデータグリッドに即、反映したい
System.Windows.Forms.DataGridView ではなく、
System.Windows.Forms.DataGrid     をお使いなのですか?

.NET 2.0 以降なら、データグリッドではなくデータグリッドビューをお奨めします。
http://msdn.microsoft.com/ja-jp/library/ms171628%28VS.80%29.aspx

それとも、利用しているのは ASP.NET 用の DataGrid サーバーコントロールなのでしょうか?
(ASP.NET 版の DataGrid では Columns.Clear できるが、WinForm 版では利用できない)


> rsALibraryM = New ADODB.Recordset
ADO を併用利用することは、可能な限り避けてください。

今のままだと、ADODB.Connection による接続と、OleDbConnection による接続が
二本張られることになりますし、その上、COM Interop も行われることになります。
ADO.NET に一本化することを 強く お奨めします。

特に adOpenStatic な場合は、カーソル操作が必須というわけでも無いため、
多くの場合、Recordset を ADO.NET の DataTable に置き換える形で移植できるはずです。


どうしても ADO を使うのであれば、PIA を参照設定したうえで、
適宜、Marshal.ReleaseComObject の呼び出しが必要とされる事に
注意してください。Close したり Nothing 代入するだけでは不十分です。

http://support.microsoft.com/kb/321415/ja
》プライマリ相互運用アセンブリを使用する場合、コンパイラでは、
》さまざまな ADO オブジェクトに対して複数のオブジェクト名を使用できます。
》ADO が正常に動作するためには、使用するクラスのクラス名の最後に、
》必ず "Class" という単語が含まれている必要があります。次に例を示します。
》 ADODB.ConnectionClass

》これらのオブジェクトを使用する場合は、この資料で説明した
》ReleaseComObject を使用して、COM で参照が解放されるようにします。


> そのあとデータの更新を実施した結果を
> データグリッド"dgdGrid"にも反映したいのですが
> どのようなロジックを入れたらよいでしょうか
rsALibraryM を使うのではなく、wkDS に対して追加・削除・編集を行い、
その編集結果を wkAdp1 経由で Update するようにしてみてください。

もしくは、wkAdp1.Fill(DataTable, ADODB.Recordset) を用いて、
Recordset 経由で wkDS.Tables("LibraryM") にデータをもってくるとか。

DB に格納済みなデータなら、再度読み込み直す…という選択肢も。

[ツリー表示へ]
タイトルRe^2: データの更新結果をデータグリッドに反映したい
記事No10838
投稿日: 2012/06/15(Fri) 08:54
投稿者かっちゃん
> > データの更新結果をデータグリッドに即、反映したい
> System.Windows.Forms.DataGridView ではなく、
> System.Windows.Forms.DataGrid     をお使いなのですか?
>
> .NET 2.0 以降なら、データグリッドではなくデータグリッドビューをお奨めします。
> http://msdn.microsoft.com/ja-jp/library/ms171628%28VS.80%29.aspx
>
> それとも、利用しているのは ASP.NET 用の DataGrid サーバーコントロールなのでしょうか?
> (ASP.NET 版の DataGrid では Columns.Clear できるが、WinForm 版では利用できない)
>
>
> > rsALibraryM = New ADODB.Recordset
> ADO を併用利用することは、可能な限り避けてください。
>
> 今のままだと、ADODB.Connection による接続と、OleDbConnection による接続が
> 二本張られることになりますし、その上、COM Interop も行われることになります。
> ADO.NET に一本化することを 強く お奨めします。
>
> 特に adOpenStatic な場合は、カーソル操作が必須というわけでも無いため、
> 多くの場合、Recordset を ADO.NET の DataTable に置き換える形で移植できるはずです。
>
>
> どうしても ADO を使うのであれば、PIA を参照設定したうえで、
> 適宜、Marshal.ReleaseComObject の呼び出しが必要とされる事に
> 注意してください。Close したり Nothing 代入するだけでは不十分です。
>
> http://support.microsoft.com/kb/321415/ja
> 》プライマリ相互運用アセンブリを使用する場合、コンパイラでは、
> 》さまざまな ADO オブジェクトに対して複数のオブジェクト名を使用できます。
> 》ADO が正常に動作するためには、使用するクラスのクラス名の最後に、
> 》必ず "Class" という単語が含まれている必要があります。次に例を示します。
> 》 ADODB.ConnectionClass
>
> 》これらのオブジェクトを使用する場合は、この資料で説明した
> 》ReleaseComObject を使用して、COM で参照が解放されるようにします。
>
>
> > そのあとデータの更新を実施した結果を
> > データグリッド"dgdGrid"にも反映したいのですが
> > どのようなロジックを入れたらよいでしょうか
> rsALibraryM を使うのではなく、wkDS に対して追加・削除・編集を行い、
> その編集結果を wkAdp1 経由で Update するようにしてみてください。
>
> もしくは、wkAdp1.Fill(DataTable, ADODB.Recordset) を用いて、
> Recordset 経由で wkDS.Tables("LibraryM") にデータをもってくるとか。
>
> DB に格納済みなデータなら、再度読み込み直す…という選択肢も。

魔界の仮面弁士様
いつもありがとうございます。

今まで、VB6.0を使っており、今回初めてVS2010によるVBへ変換している最中です
System.Windows.Forms.DataGrid は System.Windows.Forms.DataGridView に変更しました。  
現時点ではADO.NETがわからない状態ですので
理解するのに、もう少し時間がかかると思います。
よろしくお願いいたします。

[ツリー表示へ]