2013-05-16 58 views
0

我試圖解決一個項目,我從SQL數據庫中拉出一列數據並將數據與列表框中的值進行比較。到目前爲止,它正在查找比較結果,但僅返回一個值,即使在列表框中有多個匹配項。C#WinForm - 比較DataReader瓦特/列表框內容並顯示匹配

我在這裏做錯了什麼?感謝任何人可以提供的幫助。

private void btnDoAudit_Click(object sender, EventArgs e) 
    { 
     string respName = "something"; 
     SqlDataReader reader = null; 

     using (SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=XXXX;Integrated Security=True;;User Instance=True")) 
     { 
      using (SqlCommand command = new SqlCommand("SELECT [Responsibility_Name] FROM [tblResponsibility] WHERE [Sensitive_Transaction]='TRUE'", conn)) 
      { 
       conn.Open(); 

       reader = command.ExecuteReader(); 

       while (reader.Read()) 
       { 
        respName = (string)reader["Responsibility_Name"]; 



         if (lstResponsibilities.Items.Contains(respName) == true) 
         { 
          txtResults.Text = respName; 
         } 

       } 
       reader.Close(); 
       conn.Close(); 
      } 
     } 
    } 

回答

1

每當你找到一個匹配時,你就覆蓋你的txtResults.Text。您可以附加,而不是:

txtResults.Text += respName; 

或者,也許你寧願只保留搜索結果列表中的一個列表,然後將它們加入到的東西更清晰。你可以把這個靠近你的方法,你在哪裏聲明的其他變量的頂部:

List<string> matches = new List<string>(); 

然後,而不是設置txtResults.Text的,你只是做:

matches.Add(respName); 

而且一旦你「再與SqlConnection的完成,以你的方法結束時,你可以將它們合併成一個好看的字符串:

txtResults.Text = string.Join(", ", matches); 
+0

大,的作品!我知道我忽略了那麼簡單的事情。 – InnerMB

+0

如果我拋出一個else if(lstResponsibilities.Items.Contains(respName)== false){txtResults.Text =「沒有衝突。」; } ...然後向列表框中添加一個匹配值並重新運行該方法,「不存在衝突」消息將保留並且不會被新的匹配值覆蓋。 – InnerMB

+0

@InnerMB如果您使用+ =追加文本,請確保先清除文本。在該方法的頂部,您需要添加'txtResults.Text =「」;'或'txtResults.Text = string.Empty();'或'txtResults.Clear();' – itsme86

0

看起來像你的while語句,每次找到匹配,則覆蓋以前的比賽ES:

txtResults.Text = respName; 

也許你想創建它們的一個逗號分隔的列表:

txtResults.Text += respName + ", "; 

再修剪一下最後一個逗號之後

+0

感謝您的幫助 - 您是對的。 – InnerMB

相關問題