0

テーブルに次の列の値を表示する DataGridView があります

PK1, PK2, PK3, C1, C2, C3, C4
  1,   2,   3,  A,  B,  X,  Y
  4,   1,   4,  C,  D,  Z,  Y (Match the rows in the table below)
  2,   3,   5,  F,  E,  X,  W
  3,   1,   2,  A,  B,  X,  Y (Match the rows in the table below)
  ......

PK1, PK2, PK3テーブルの主キーを組み合わせます。PK の DataTable を指定します (例を以下に示します)。これらの行を見つけるための最良の方法は何ですか?

PK1, PK2, PK3
  4,   1,   4
  3,   1,   2

(DataGridView セルを反復するか、DataSource に下線を引きますか?行内のいくつかのセルを強調表示する必要があるため、おそらくセルです。パフォーマンスに関する考慮事項?)

4

2 に答える 2

1

強調表示を実装するために、DataGridView RowPrePaintイベントCellFormattingイベント、またはCellPaintingイベントを確認します。

行を一致させるには、データがどこから来ているかが重要です。同じデータベースからのものである場合、データを返すクエリでマッチングを実行できますか?Linqを使用して、DataTablesでクエリを実行し、一致するものを見つけることができます。

もう1つのアイデアは、2つのDataTable間にDataRelationを作成することです。下部にあるDataTableクラスページの例を参照してください。MakeDataRelation例を見つけるために検索してください。DataRelationsは非常に扱いにくい場合がありますが、機能させると非常に便利です。

パフォーマンスの考慮事項を評価するには、おそらくより多くの情報が必要です。データはどこから来ていますか?各テーブルのデータの行数は、数、10、100、1000ですか?データソースの設計を管理できますか?この複合キーを削除して、代理キーを作成できますか?

クエリを制御できる場合は、次のようにすることができます。

SELECT A.PK1, A.PK2, A.PK3, A.C1, A.C2, A.C3, 
       WHEN B.PK1 IS NULL THEN 0 ELSE 1 END AS OTHER
FROM TABLEA AS A
LEFT JOIN TABLEB AS B ON A.PK1 = B.PK1 AND A.PK2 = B.PK2 AND A.PK3 = B.PK3
WHERE <whatever other criteria you have for this query>

これで、DataTableのOTHER列は、TableBが一致したかどうかを示します。WHEN...END句は実際には必要ありません。nullの有効な値がないことをB.PK1前提として、nullと値を比較して処理することができます。PK1アプリケーションでは、OTHER列を表示せず、強調表示を行うかどうかを決定する値として使用してください。

于 2012-11-17T08:03:25.837 に答える
0

を定義DataTable.PrimaryKey()してから使用できますDataTable.Rows.Find()

主キー

DataRow を見つける

データテーブルでの作業は、DataGridView Cell よりも効率的です。セルをフォーマットする前に注意することをお勧めします。この Using Cell Styles Efficiently を 確認してください。

于 2016-01-08T07:00:30.793 に答える