2013-06-23 80 views
0

讓我先說這個,說我不做非常多的winforms工作,所以請原諒我的無知。來自ASP的綁定有點奇怪。以編程方式綁定ComboBox(s)通過控制名稱

我想循環一系列的組合框,並使用控制名稱和相應的存儲過程字典綁定它們。這是我想要做的一個簡化的例子。

public Dictionary<string, string> GetDropDownSchema() 
    { 
     return new Dictionary<string, string> { {"ddClient", "guisp_SelectClientDropDown"}, {"ddType", "guisp_SelectTypeDropDown"}, {"ddCounty", "guisp_SelectCountyDropDown"}}; 
    } 

    public void BindComboBoxes() 
    { 
     var ddSchem = GetDropDownSchema(); 
     foreach (var dd in ddSchem) { 
      var dt = new DataTable(); 
      using (var con = new SqlConnection(ConStr)) { 
       try { 
        var adapter = new SqlDataAdapter(dd.Value, con); 
        adapter.Fill(dt); 

        ((ComboBox)Controls.Find(dd.Key, true)[0]).DataSource = dt; 
        ((ComboBox)Controls.Find(dd.Key, true)[0]).DisplayMember = "DisplayText"; 
        ((ComboBox)Controls.Find(dd.Key, true)[0]).ValueMember = "ID"; 

       } 
       catch //(Exception ex) 
       { 
        //Code is not throwing any exception, just doesn't work 
       } 

      } 
     } 

我敢肯定我錯過了一些簡單的事情。我感謝任何幫助或建議,以更優雅的方式來解決這個問題。

謝謝

+0

@Steve的SelectCommand屬性遺憾的是是一個錯字,我試圖簡化代碼對於這個問題 –

回答

1

我想,guisp_XXXXXX是存儲過程的名稱。如果是這種情況,那麼你不能以這種方式使用它們來使用SqlDataAdapter填充數據表。

相反,你需要建立一個SqlCommand,指定它的CommandType爲StoredProcedure的和該命令分配給SqlDataAdapter的

using (var con = new SqlConnection(ConStr)) 
{ 
    try 
    { 
     con.Open(); 
     var adapter = new SqlDataAdapter(); 
     var cmd = new SqlCommand(dd.Value, con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     adapter.SelectCommand = cmd; 
     adapter.Fill(dt); 
     ...... 
+0

哦哇......這樣一個愚蠢的錯誤大聲笑,我不經常使用SqlDataAdapter。謝謝你的幫助。 –