簡體   English   中英

從鏈接表中獲取當前的主鍵,設置Checkstate復選框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM