2014-02-18 23 views
0

夥計們我有一個配置爲像下拉列表一樣工作的組合框。它正在通過數據庫進行填充。它工作完美無瑕。在數據綁定組合框中搜索?

現在我想要做的是這樣的: 例如我有comboBox從數據庫表「tblPersons」獲取「Names」列並顯示它。 假如,例如,總共有4個條目的數據庫表 「tblPersons」 的

  1. 阿里汗
  2. ·艾哈邁德·汗
  3. 比爾·坎
  4. 比拉爾法魯基

所以,當我在組合框寫「艾哈邁德·法魯基」(組合框應該是可編輯的,它應該顯示名稱爲「艾哈邁德」的所有條目一次我寫了「艾哈邁德」)並按回車鍵,就應該在數據庫表「tblPersons」搜索 - 如果「艾哈邁德遠ooqi」發現 - 它應該選擇它,如果‘艾哈邁德·法魯基’沒有發現 - 它應該問,如果我想創建數據庫表中的新條目‘tblPersons’,如果我點擊‘是’就應該打開另一個窗體添加新人,如果我點擊「否」,它應該什麼也不做。

我該怎麼做。我是C#的新手,所以任何幫助將不勝感激。如果我的問題不清楚,我很抱歉。

問候。

編輯:這是我的測試表單,在這裏我是一個用來輸入Name的文本框,文本框應該在數據庫中搜索一個名字,然後如果找到名字,在數據庫的相應文本框中顯示來自數據庫的數字和電子郵件。如果沒有找到,它應該顯示messagebox要求用戶創建一個新的人,如果點擊是,切換到另一個表格(用戶將創建新的人)。

enter image description here

+0

你已經完成的工作是什麼?查找自動完成屬性並註冊,關鍵事件 – ARH

+1

請不要包含有關問題標題中使用的語言的信息,除非在沒有它的情況下沒有意義。標籤用於此目的。另外,如果你的問題不是直接關於它並且你只是寫代碼,那麼不要在標籤中包含IDE標籤(Visual Studio)。代碼問題很少連接到代碼編輯器。 –

+0

我真的很抱歉,它不會再發生。 –

回答

0

呼叫fillCombo功能表單負載和cmb_SelectedValueChanged事件指派給你的組合框。不要忘記將autocompletemode屬性設置爲組合框。

cmb.AutoCompleteMode = AutoCompleteMode.SuggestAppend 


private void fillCombo() 
{ 
    string sql = "SELECT ID, NAME, Number, Email FROM tblPerson"; 
    SqlConnection Cnn = new SqlConnection("connections string"); 
    Cnn.Open(); 

    SqlDataAdapter da = new SqlDataAdapter(sql, Cnn); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 

    cmb.ValueMember = "ID"; 
    cmb.DisplayMember = "Name"; 
    cmb.DataSource = dt;  
} 

private void cmb_SelectedValueChanged(object sender, EventArgs e) 
{ 
    if (cmb.SelectedItem != null) 
    { 
     txtNumber.Text = ((DataRow)cmb.SelectedItem)["Number"].ToString(); 
     txtEmail.Text = ((DataRow)cmb.SelectedItem)["Email"].ToString(); 
    } 
} 

private void cmb_Validating(object sender, CancelEventArgs e) 
{ 
    if (cmb.SelectedItem == null) 
    { 
     If (MessageBox.Show("Do you want to create a new person?", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      frmNewPerson person = new frmNewPerson(); 
      person.Name = cmb.Text; 
      if (person.ShowDialog() == DialogResult.Yes) 
      { 
       fillCombo(); 
       DataRow dr = ((DataTable)cmb.DataSource).Select("Name='" + person.Name + "'")[0]; 
       cmb.SelectedValue = Convert.ToInt32(dr["ID"]); 
      } 
     } 
     else 
     { 
      txtNumber.Text = string.Emtpy; 
      txtEmail.Text = string.Emtpy; 
     } 
    } 
} 
+0

謝謝你的回答。我已經嘗試過你的方法。但是每當我嘗試運行代碼時,它都會彈出消息框「你想創建新人嗎?」甚至沒有顯示錶格。這是爲什麼? –

+0

對不起。但visual studio沒有安裝在我的電腦中,所以我寫了這個代碼n ++。所以,請僅將我的代碼作爲邏輯。它可能有一些錯誤。我更新了我的代碼。在此更新中,我創建了另一個事件cmb_Validating。將此事件分配給您的組合框。 – Shell