2014-02-28 34 views
0

我有一個checkedListBox和一個文本框......當我檢查了checkedListBox中的項目時,它顯示了TextBox中的相應項目的值.....當我檢查了多個項目checkedListBox它顯示文本框中由{,}「逗號分隔的各個項目的值有問題關於清單箱

現在我的問題是,當我取消選中文本框中的項目時,它必須從文本框中刪除相應未檢查項目的值......也PLZ告訴我如何以編程方式從文本框的末尾刪除「逗號」{,}

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=email_client;Integrated Security=True"); 
     SqlCommand command = new SqlCommand("Select * FROM address_book ", connection); 

     try 
     { 
      connection.Open(); 
      { 
       SqlDataReader drd = command.ExecuteReader(); 

       while (drd.Read()) 
       { 
        this.checkedListBox1.Items.Add(drd.GetString(0).ToString()); 

       } 
      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 

     connection.Close(); 
    } 

    private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

      SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=email_client;Integrated Security=True"); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("select * from address_book where name='" + checkedListBox1.Text + "'", con); 
      SqlDataReader dr; 
      dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       textBox1.Text += Convert.ToString(dr["id"] + ","); 
      } 
      dr.Close(); 


    } 

    private void textBox1_Enter(object sender, EventArgs e) 
    { 
     ToolTip tt = new ToolTip(); 
     tt.SetToolTip(textBox1, "sorry"); 
    } 
} 
+0

ok先生,我會遵循這個編輯規則.....但現在你可以plz給我完美的答案... @ pravprab – user3304978

回答

0

首先,如果您想顯示「已檢查」項目,則不應使用SelectedIndexChanged事件。使用ItemCheck代替:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 

然後使用CheckedListBox.CheckedItems以檢索哪些檢查所有項目:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    StringBuilder stringBuilder = new StringBuilder(); 

    foreach (var item in checkedListBox1.CheckedItems) 
    { 
     SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=email_client;Integrated Security=True"); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(string.Format("select * from address_book where name='{0}'", item), con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      stringBuilder.Append(Convert.ToString(dr["id"] + ",")); 
     } 
     dr.Close(); 
    } 

    textBox1.Text = stringBuilder.ToString().TrimEnd(','); 
} 

記住使用string.TrimEnd()修剪最後一個逗號。

嗯,這不是最有效的方法,因爲當他們中的一個改變時,你需要通過每個檢查項目。您可以使用Dictionary來維護名稱 - ID對 - 至少當您取消選中某個項目時不需要執行SQL查詢,對吧? :)

+0

PLZ詳細解釋先生......作爲我只是一個初學者 – user3304978

+0

謝謝你先生......你給我一個完美的代碼........但是使用SelectedIndexChanged而不是ItemCheck給出了確切的解決方案...... – user3304978

+0

當您選擇某個項目時,將調用SelectedIndexChanged,這意味着,如果您只關注該項目而不檢查項目(單擊它的內容,而不是複選框)。只有當一個項目被選中或未選中時,ItemCheck纔會被調用。在你的問題中,據說「當我檢查checkedListBox中的項目時,它顯示了TextBox中相應項目的值」。我認爲'SelectedIndexChanged'是你需要的,而不是'SelectedIndexChanged'。 – sqybi

0

要刪除,

textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1); 

但我最好將我的dr [「id」]保存在List中,並創建一個遍歷列表並返回逗號分隔字符串的小函數。添加和刪​​除項目應該在該集合中進行。

+0

先生其實我不清楚的解決方案可以你plz提供給我一定的爲上面提到的問題編碼 – user3304978