products というテーブルの値を含む CheckedListbox があります。アイデアは、顧客に関連付けられている製品をチェックすることです。リンクテーブルに正しく保存されるようになりましたが、再度ロードすると、チェックされた項目が CheckedListbox に正しくロードされません。
したがって、そのリンク テーブルから、1 つの列からすべての行を取得したいと考えています。すべてのテーブルは既にアプリケーションにロードされているため、SQL を使用したくありません。
linq を使用してみましたが、成功しませんでした。ID はここでは空です。
int[] Ids = (from m in dataset.Tables["LinkTable"].AsEnumerable()
where m.Field<int>("customerId") == customerId
select m.Field<int>("productId")).ToArray();
次に、それらの Id の取得に成功した場合は、それらの主キーのインデックスを取得して、正しい製品を に設定できるようにしますchecked
。このようにするのにうんざりしていますが、グローバルデータテーブルに主キーを設定しているため、プログラムの他の部分でエラーが発生します。Datagridviews はそれが好きではありません。
DataColumn[] keyColumns = new DataColumn[1];
keyColumns[0] = dataset.Tables["products"].Columns["Id"];
currentPatient.GetTheDataSet.Tables["products"].PrimaryKey = keyColumns;
foreach (int Id in Ids)
{
DataRow row = dataset.Tables["Products"].Rows.Find(Id);
int index = dataset.Tables["Products"].Rows.IndexOf(row);
clbMedications.SetItemChecked(index, true);
}
主キーを指定せずに最後の部分をやりたいのですが、linqでそれを行う方法が見つかりませんでした。
私はそれが2つの質問で構成されていることを知っていますが、おそらくこれは1つのlinqステートメントで実行できるので、それらを組み合わせたほうがよいでしょう。