3

Windowsアプリケーションでウルトラグリッドを使用して、データベースのテーブルのレコードを表示するために、そのDataSourceプロパティをそのテーブルから返されるデータテーブルに設定しました。

行数は約100000行にすることができます。

今私は2つの質問があります:

1)ユーザーがこのグリッドのいくつかの行を選択し、それらをすべて編集できるようにしたい。これを行うには、これらの選択された行のどのセルが同じ値を持ち、どのセルが同じ値を持たないかを知り、同じ列を形。

私が考えた最初の解決策は、2つのforeachループを介して選択されたすべての行のすべての列をチェックすることでした。これに対するより良い解決策はありますか?

2)最後に、ユーザーが保存ボタンを押すと、更新がテーブルに適用されます。これを行うための最良の方法は何ですか?(INsqldataadapterのコマンドまたはUpdateCommandを使用するか...)

4

3 に答える 3

3

私の分析によると、

1)表示するすべての列に基づいてウルトラグリッドでグループ化を行い、データを保存できます。グループ化すると、類似した列が一緒に表示され、データ分析と、異なる行で同じ列データを特定するための時間を大幅に節約できます。同様のデータのリストを取得したら、生成された行数にアクセスできるため、ループごとに、またはループごとにそれらを簡単に処理できます。

2)これにはSystem.Data.SqlClient.SqlBulkCopyの使用を検討する必要があります。ここにドキュメントがあります、そしてもちろんオンラインでたくさんのチュートリアルがあります。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx いいえの場合はINを避ける必要があります。パフォーマンスに影響を与えるため、レコードの数は多くなります。sqlbulkcopyを使用したくない場合は、ultragrid(ultragridの非常に便利な機能)のUpdateData()を使用することもできます。

于 2012-07-20T03:33:56.120 に答える
3

UltraGridが提供するメソッド呼び出しUpdateData()を使用して、行ごとまたはセルごとに変更を追跡する必要なしに、すべての複数の行を更新できます。

UpdateDataメソッドは、グリッド内の変更された情報を更新し、データプロバイダーに送信します。更新が完了すると、データが変更されたとマークされた行はすべて、そのマークがクリアされます。

UpdateMethodは、まだ編集モードになっているセルを終了する必要があります。これはバグであり、これを解決するには、以下に示すように使用する必要があります。

ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode); ultraGrid1.UpdateData();

この方法で使用する理由の詳細については、http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.Aspx ?ArticleID=4220を参照してください。

2番目の質問に答えるには、この方法でUpdateDataメソッドを使用する必要があります

e.g.
private void ultraButton1_Click(object sender, EventArgs e)
{
    ultraGrid1.UpdateData();
    this.dbRowsTableAdapter.Update(this.testDataSet);
    ultraButton1.Enabled = false;
}

繰り返しになりますが、UltraGridはローカルデータをそれ自体に対して純粋に保つようです。したがって、TableAdapterのUpdateメソッドを呼び出す必要があります。つまり、DataSetを作成し、それをSqlDataAdapterで埋める必要があります。

UltraGrid.UpdateDataメソッドがデータベースにコミットしない理由を明確に説明しているフォーラムを参照してくださいhttp://www.infragistics.com/community/forums/t/57161.aspx

于 2012-07-19T12:59:24.390 に答える
0

最初の質問の解決策が見つからなかったため、ループを使用してグリッドの選択したすべての行を比較し、共通の値を診断しました。しかし、2番目の質問にはSqlBulkCopyを使用しました。

于 2012-07-31T04:55:51.673 に答える