DataTable的事件响应
这个问题是由要同步两个数据库而引发的,我的想法是,对于两个同样内容的数据库(保存在Access和SqlServer中),使得在程序中修改一个表的时候对两个数据库的表同时更新。 当然,更新的工作交给Adapter,主要的技术是让从两数据库读取的Datatable修改同步起
这个问题是由要同步两个数据库而引发的,我的想法是,对于两个同样内容的数据库(保存在Access和SqlServer中),使得在程序中修改一个表的时候对两个数据库的表同时更新。
当然,更新的工作交给Adapter,主要的技术是让从两数据库读取的Datatable修改同步起来。
这里就要用到DataTable的事件响应,我用到的有:
增:DataTable.TableNewRow ; DataTable.RowChanged ;
删:DataTable.RowDeleting ; DataTable.RowDeleted ;
改:DataTable.ColumnChanged
下面以 表 T1 T2 为例说明这些事件如何被触发,以及触发时怎样处理。
增:
新建一个数据行,我们一般使用 T1.Rows.Add() 方法,这个方法将触发 T1.RowChanged 事件,说明一个新的行已经被加到 T1 中,索引也随之更新,但是这个过程无法让用户编辑这个行(一次写入);而为了让用户在添加新行之前进行编辑(以避免无法自定义验证的情况),需要在调用 T1.Rows.Add() 方法前声明一个DataRow 变量来保存新行的数据。
为简便计且让 DataTable 自行检查输入的合法性,在新行上使用 DataRow R1 = T1.NewRow();
这样实例化的 R1 将带有 T1 的 schema 结构。
在调用 T1.NewRow() 方法时,即触发 T1.TableNewRow 事件;值得注意的是,此时这个数据行并没有真正加入到 T1.Rows 集合中,而当对 R1 的各个成员赋值时,将依次触发 DataTable.ColumnChanged 事件,最后调用 T1.Rows.Add( R1 ); ,这时新行的增加就可以在 T1.RowChanged 事件中利用 e.Action 属性捕获到。
如此一来,即有如下处理:
修改命令? 触发的事件? 同步处理
DataRow R1 = T1.NewRow();? T1.TableNewRow? DataRow R2 = T2.NewRow();?
R1[0] = v1;? T1.ColumnChanged? R2[0] = v1;
T1.Rows.Add(R1);? T1.RowChanged? T2.Rows.Add(R2);
删:
由于我们假设两个数据库的内容一致,删除的时候,只需要知道 T1 中的哪一行被删除,即可做出正确的处理。
在删除时,T1.Rows.RemoveAt(0); 和 T1.Rows[0].Delete(); 是等效的,均将依次触发 DataTable.RowDeleting 和 DataTable.RowDeleted 事件。
为了得到被删除行原本所在位置的索引,我们需要在其被删除前( DataTable.RowDeleted )捕获,即在 DataTable.RowDeleting 的响应中,通过 T1.Rows.IndexOf(e.Row) 返回得到;而在 DataTable.RowDeleted 的响应中我们将得到 -1 。
如此一来,即有如下处理:
修改命令? 触发的事件? 同步处理
T1.Rows[n].Delete();? DataTable.RowDeleting? int i = T1.Rows.IndexOf(e.Row);
-? DataTable.RowDeleted? T2.Rows[i].Delete();
改:
所谓的更改,即修改 DataTable 中某一元素( cell )的值。若要修改生效,应当使用如下格式的语句
T1.Rows[m][n] = v2 ;
笔者曾试用过 T1.Rows[m].ItemArray[n] = v2;语句,但赋值无效,这是因为 ItemArray 集合只接受从 Array 实例传递的批量值,使用如下语句:
object[] a1 = new object[1] { v3 };
T1.Rows[m].ItemArray = a1;
可以批量更改一行中的数据,这常用在新建行的过程中,不适合单个元素的赋值。
在赋值时,触发 DataTable.ColumnChanged 事件,通上例,可以获得被修改单元的行列索引和修改后的值。
如此一来,即有如下处理:
修改命令? 触发的事件? 同步处理
T1.Rows[m][n] = v2;? DataTable.ColumnChanged? int i = T1.Rows.IndexOf(e.Row);
int j = T1.Rows.IndexOf(e.Column);
T2.Rows[i][j] = e.ProposedValue;
最后,假如我们的 T1 和 T2 都是由 Adapter.Fill() 方法获得,那么这个过程当然将同时被两个 Adapter 记录,再调用 Adapter.Update() 方法就可实现同步更新。
另,这篇文章中没有考虑两数据库初始内容不同的情况。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









一般的に、同時に使用する必要があるのはヘッドフォンまたはスピーカーのいずれか 1 つだけですが、Win11 システムでヘッドフォンとスピーカーが同時に鳴るという問題が発生したと友人が報告しています。 Realtek パネルでオフにすれば問題ありません。以下を見てみましょう。 win11 でヘッドフォンとスピーカーが一緒に聞こえる場合はどうすればよいですか? 1. まず、デスクトップで「コントロール パネル」を見つけて開きます。 2. コントロール パネルに入り、「ハードウェアとサウンド」を見つけて開きます。 3. 次に、「」を見つけます。 Realtek High Definition" とスピーカーのアイコン。オーディオマネージャー" 4. [スピーカー] を選択し、[リアパネル] をクリックしてスピーカー設定に入ります。 5. 開くとデバイスの種類が表示されるので、ヘッドフォンをオフにしたい場合は、「ヘッドフォン」のチェックを外します。

同期フォルダー内の 1 つ以上のアイテムが Outlook のエラー メッセージと一致しない場合は、会議アイテムを更新またはキャンセルしたことが原因である可能性があります。この場合、ローカル バージョンのデータがリモート コピーと競合していることを示すエラー メッセージが表示されます。この状況は通常、Outlook デスクトップ アプリケーションで発生します。同期したフォルダー内の 1 つ以上のアイテムが一致しません。競合を解決するには、プロジェクトを開いて操作を再試行します。同期フォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しない問題を修正する Outlook デスクトップ バージョンでは、ローカルの予定表アイテムがサーバー コピーと競合すると問題が発生する可能性があります。ただし幸いなことに、それを助ける簡単な方法がいくつかあります

win10 クリップボードの非常に便利な機能は、クロスデバイス クラウド ストレージ機能です。これは非常に便利で、ユーザーが PC デバイスとモバイル デバイスで同時にコピー アンド ペーストするのに役立ちます。設定方法は非常に簡単で、システム内のクリップボードに設定するだけです。 win10 クリップボードを携帯電話に同期する 1. まず、左下隅の [スタート] をクリックして設定を入力します。 2. 次に「システム」をクリックします。 3. 左側の「クリップボード」を選択します。 4. 最後に、右側の「デバイス間同期」で「ログイン」をクリックし、携帯電話を選択します。

jQuery.val() が使用できない問題を解決するには、具体的なコード例が必要です フロントエンド開発者にとって、jQuery の使用は一般的な操作の 1 つです。その中でも、.val() メソッドを使用してフォーム要素の値を取得または設定する操作は、非常に一般的な操作です。ただし、特定のケースでは、.val() メソッドを使用できないという問題が発生する可能性があります。この記事では、いくつかの一般的な状況と解決策を紹介し、具体的なコード例を示します。問題の説明 jQuery を使用してフロントエンド ページを開発する場合、時々次のような問題が発生します。

jQuery は、DOM 操作、イベント処理、アニメーション効果などを簡素化するために使用できる人気のある JavaScript ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

Baidu Cloud Sync Disk を同期するにはどうすればよいですか? Baidu Cloud Sync Disk で同期するファイルを選択できますが、ほとんどのユーザーは Baidu Cloud ファイルを同期する方法を知りません。次に、エディターが提供する Baidu Cloud Sync Disk 同期方法のグラフィック チュートリアルです。興味のあるユーザーはぜひ見に来てください! Baidu クラウド同期ディスクを同期する方法 1. まずコンピュータのデスクトップに入り、[Baidu クラウド同期ディスク] アイコンを右クリックし、[設定] を選択します; 2. 次にサービス ウィンドウを展開し、[詳細設定] ページに切り替えて、 [フォルダの選択]; 3. 最後に以下のようなページに切り替わり、同期が必要なファイルにチェックを入れて[OK]をクリックします。

多くのユーザーが win11 システムを更新しようとしましたが、更新後にスタート メニューが使用できないことがわかりました。最新の更新プログラムに問題があることが原因である可能性があります。Microsoft がこれらの更新プログラムを修正するか、アンインストールして問題を解決するのを待つことができます。問題です。一緒に見てみましょう。解決策。 win11 インストール後にスタートメニューが使用できない場合の対処方法 方法 1: 1. まず、win11 でコントロール パネルを開きます。 2. 次に、プログラムの下にある [プログラムのアンインストール] ボタンをクリックします。 3. アンインストール インターフェイスに入り、左上隅にある [インストールされたアップデートの表示] を見つけます。 4. 入力後、アップデート情報でアップデート時間を確認し、最近のアップデートをすべてアンインストールできます。方法 2: 1. さらに、更新なしで win11 システムを直接ダウンロードすることもできます。 2.これはほとんどのない製品です

Yulong 8 ワインマスター試験にはどのような問題がありますか?対応する答えは何でしょうか?試験に早く合格するにはどうすればよいですか?マスター オブ ワイン試験の活動では、回答しなければならない質問がたくさんあり、その回答を参照して解決することができます。これらの質問にはすべてワインの知識が含まれます。参考が必要な場合は、龍が如く 8 ワインマスター試験問題の解答の詳細な分析を見てみましょう。 Rulong 8 ワインマスター試験の問題の答えを詳しく解説 1.「ワイン」に関する質問。ハワイで大量に栽培されているサトウキビの糖分を原料に醸造され、王室御用達の蒸留所で造られる蒸留酒です。このワインの名前は何ですか? 答え: ラム酒 2.「ワイン」についての質問です。写真は乾燥高麗人参と乾燥ベルモットをブレンドしたドリンクです。オリーブが入っているのが特徴で「コックニー」と呼ばれています。
