2014-02-17 43 views
0

我有一個窗體顯示一個datagridview和一個文本框和組合框。當在組合框中選擇列名稱並在文本框中鍵入搜索時,它將過濾並顯示搜索到的數據。 如何檢測組合框是否未選中,並將文本框的只讀狀態更改爲true,並且在選擇了某些內容時將其更改回false,以便搜索?檢查組合框的狀態並只更改文本框

DataTable dt; 
     private void searchForm_Load(object sender, EventArgs e) 
     { 
      SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\LWADataBase.sdf;"); 
      SqlCeDataAdapter sda = new SqlCeDataAdapter("select * from customersTBL", con); 
      dt = new DataTable(); 
      sda.Fill(dt); 
      dataGridView1.DataSource = dt; 
      comboSearch.Items.Add("[First Name]"); 
       comboSearch.Items.Add("Surename"); 
      comboSearch.Items.Add("[Address Line 1]"); 
      comboSearch.Items.Add("[Address Line 2]"); 
      comboSearch.Items.Add("County"); 
      comboSearch.Items.Add("[Post Code]"); 
      comboSearch.Items.Add("[Contact Number]"); 
      comboSearch.Items.Add("[Email Address]"); 



     } 



     private void searchTxt_TextChanged(object sender, EventArgs e) 
     { 


      { 
       DataView dv = new DataView(dt); 
       dv.RowFilter = "" + comboSearch.Text.Trim() + "like '%" + searchTxt.Text.Trim() + "%'"; 
       dataGridView1.DataSource = dv; 
      } 



     } 

回答

0

添加一個空的項目組合框,然後

if(comboSearch.SelectedItem =="") 
{ 
searchTxt.ReadOnly = true; 
} 
else 
{ 
searchTxt.ReadOnly = false; 
} 

執行你的代碼後添加此行:

comboSearch.SelectedIndex =0; 

確保你的空項目是第一個項目。

+0

searchTxt保持爲只讀當我使用該代碼 – user3237403

+0

那麼你需要在列表框中有一個空的項目,我會upd吃了代碼。 – NetInfo

0

你可以試試這個

if(ComboBox.SelectedItem == null) { 
    // do something 
TextBox.ReadOnly = true;  //Using the TextBox.ReadOnly property 

} 
else{ 
Textbox.ReadOnly=false; 
} 

希望它可以幫助你!

0

在您的FormLoad中將一行添加到comboSearch控件的空行中。確保它是關於[名字]的項目。

comboSearch.Items.Add(string.Empty); 
comboSearch.Items.Add("[First Name]"); 

爲comboSearch for SelectedIndexChanged添加事件處理程序。在事件內部,設置searchTxt控件的ReadOnly屬性。它可能看起來像這樣:

private void comboSearch_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    searchTxt.ReadOnly = comboSearch.SelectedIndex != 0; 
} 
+0

該文本框不會更改只讀狀態,它只是保持只讀= false – user3237403

+0

在searchTxt.ReadOnly行上設置一個斷點以驗證您的程序正在執行該行。在調試該行的同時,單擊頂部(空白)行時驗證SelectedIndex是什麼。確保將事件綁定到設計視圖中「屬性」窗口中的組合搜索框。 – puddinman13

+0

我已經想通了,看到我的答案:)謝謝 – user3237403

0

我加了SelectedIndexChanged事件:

private void comboSearch_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      searchTxt.ReadOnly = false; 
     } 

,改變了TextChanged事件到:

private void searchTxt_TextChanged(object sender, EventArgs e) 
     { 
      if (comboSearch.SelectedItem == null) 
      { 
       searchTxt.ReadOnly = true; 
       MessageBox.Show("Please select a search criteria"); 
      } 



      else 
      { 
       searchTxt.ReadOnly = false; 
       DataView dv = new DataView(dt); 
       dv.RowFilter = "" + comboSearch.Text.Trim() + "like '%" + searchTxt.Text.Trim() + "%'"; 
       dataGridView1.DataSource = dv; 
      } 
     } 

,它現在的功能我怎麼想它到

+0

但是,當搜索條件尚未被選中時,用戶可以開始鍵入?當沒有選擇搜索條件時,爲什麼不阻止用戶輸入?只是我的意見,很高興你知道了。 – puddinman13

+0

我試過所有其他的答案,沒有人會工作,這對我有用。 – user3237403

相關問題