![](/img/trans.png)
[英]How to trigger an event when any of CheckState values in CheckListBox is changed
[英]Get present primary keys from link table, set Checkstate checklistbox
我有一個CheckedListbox,其中包含來自稱為產品的某些表中的值。 這個想法是檢查與客戶關聯的產品。 現在,它確實可以正確保存在鏈接表中,但是當再次加載它時,已檢查的項目不會正確地加載到CheckedListbox中。
因此,我想從該鏈接表中僅從一列獲取所有行。 所有表都已經加載到應用程序中,所以我不想使用sql。
我嘗試使用linq,但沒有成功,Ids在這里只是空的。
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個問題,但是也許可以只用一個linq語句來完成,所以我最好將它們結合起來。
[編輯]
最后,我想我已經有了您所需要的:
var qry = (from p in ds.Tables["products"].AsEnumerable()
select new {
Id = p.Field<int>("Id"),
Index = ds.Tables["products"].Rows.IndexOf(p),
Checked = ds.Tables["LinkTable"].AsEnumerable().Any(x=>x.Field<int>("productId") == p.Field<int>("Id") && x.Field<int>("customerId")==customerid)
}).ToList();
上面的查詢返回列表,您可以使用CheckedListbox將其忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.