2015-09-30 71 views
3

我正在處理Windows窗體應用程序,並且我有一個綁定到我的數據庫的checkListBox。我正在使用參數方法來存儲選定的文本。但是,我想要獲取與comboBox.SelectedValue類似的項目的主鍵而不是文本。有沒有辦法做到這一點?如何獲取checkListBox的值

這是我的代碼。正如你所看到的,參數是通過checkedItem文本過濾的。當我從我的checkListBox中選擇我的checkedItem時,它假設只獲取選定的項目。這項工作很好,如果我的CheckListBox項目有像彼得,艾米,鮑勃和大衛(非重複的名稱)。但是,如果我的checkListBox具有重複的名稱。彼得,艾米,艾米,鮑勃,大衛,艾米,這會造成問題。如果我選擇第一個艾米,我的parameterList將有艾米,艾米,艾米。這是一個問題,因爲我通過我的firstName過濾它(所以只要他們看到相同的名稱,它就會添加到parameterList。我真正想要的是使用employeeId之類的鍵過濾,以便它不會有任何重複的名稱在我的parameterList。(就像當我從comboBox.selecteIndex更改爲comboBox.selectedValue)。當我只選擇第一個艾米時,我的parameterList應該只有一個檢查艾米,但不是所有艾米甚至沒有檢查。 ?我可以從我的組合框value`這樣做selectedValue映射數據庫值幫助將不勝感激

例如這裏是我的checkListBox:

[x]Amy 
[]Peter 
[]David 
[]Amy 
[]Amy 
[]Jimmy 

您只能看到第一個Amy被選中。但我的parameterList有艾米,艾米,艾米,因爲我按firstName過濾。

string parameterList = ""; 
    int parameterCounter = 0; 

    // Add a parameter placeholder for each "checked" item 
    for (var t = 0; t < employeeCheckListBox.CheckedItems.Count; t++) 
    { 
     parameterList += (t == 0) ? "@p" + t : ", @p" + t; 

    } 

    string query = "select distinct firstName, lastName, employeeEmail, 
          entryYear, leaveYear 
        from[employee_detail] as ed 
        LEFT JOIN[department_detail] as dd ON ed.employeeId = dd.employeeId 
        Where firstName = (" + parameterList + ")"; 

    myCommand = new SqlCommand(query, myConn); 

    for (var t = 0; t < employeeCheckListBox.CheckedItems.Count; t++) 
    { 
     myCommand.Parameters.AddWithValue ("@p" + t, employeeCheckListBox.CheckedItems[t].ToString()); 
    }  
    if (employeeCheckListBox.CheckedItems.Count == 0) 
    {  
     myCommand = new SqlCommand(Equery, myConn); 
    } 

這是我想改變

string query = "select distinct firstName, lastName, employeeEmail, 
           entryYear, leaveYear 
         from[employee_detail] as ed 
         LEFT JOIN[department_detail] as dd ON ed.employeeId = dd.employeeId 
         Where firstName = (" + parameterList + ")"; 

//的PARAMETERLIST應該是checkListBox

+1

[這太問題(http://stackoverflow.com/ question/3801290/is-there-displaymember-and-valuemember-like-properties-for-checkedlistbox-co)應該可以幫到你。 – Icemanind

+0

你的問題對我沒有多大意義..可能需要編輯.. –

+0

@AmneshGoel,我編輯了我的問題,看看有沒有道理 – RedRocket

回答

1

您的問題是您有多名具有相同名稱的員工, 用戶如何在UI上區分它們。

因此,一個非常簡單和快速的解決這個問題的方法是,更改您在顯示在複選框列表中的UI上的內容。

由於每個員工都會有獨特的電子郵件ID ......因此,與名一起顯示EMAILID ..如下更改查詢..

select td.teacherId as ID, chineseName + ' ' + email as Name from[teacher_detail] ..... 
1

嘗試值成員設置與員工記錄的任何ID的價值選擇如this中提到的問題