2013-06-23 77 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。谢谢你的帮助。 –