Winform开发中如何将数据库字段绑定到ComboBox控件

微软信仰中心 2017-12-23

最近开始自己动手写一个财务分析软件,由于自己也是刚学.Net不久,所以自己写的的时候遇到了很多问题,希望通过博客把一些印象深刻的问题记录下来。

Winform开发中如何将数据库字段绑定到ComboBox控件

1.问题引入

在开发中用到了ComboBox控件,也就是实现下拉选择功能的控件。但是选项的 数据并不是固定的,而是要根据数据库中的某一列进行动态的调整。

2.解决思路

这里我大概考虑了两种情况,一种是下拉列表的选择项是项目中的实体类某一属性,或者项目其他要用到该属性对应的数据库主键。

这种情况主要是把实体对象通过SqlDataReader方法读取并封装到集合中,然后再绑定数据。

而我这里的情况是只需要显示对应的属性就好,使用的是SqlDataAdapter方法读取数据 ,然后在控件所在窗体初始化的时候把数据绑定。

3.参考代码

第一种情况:

SQLHelper类中的代码:

public static SqlDataReader GetReader(string sql)
     {
         SqlConnection conn = new SqlConnection(connString);
         SqlCommand cmd = new SqlCommand(sql, conn);
         try
         {
             conn.Open();
             return cmd.ExecuteReader(CommandBehavior.CloseConnection);
         }
         catch (Exception ex)
         {
             conn.Close();
             //将错误信息写入日志...
 
             throw ex;
         }
     }

封装到集合中:

public List<StudentClass> GetAllClasses()
     {
         string sql = "select ClassName,ClassId from StudentClass";
         SqlDataReader objReader = SQLHelper.GetReader(sql);
         List<StudentClass> list = new List<StudentClass>();
         while (objReader.Read())
         {
             list.Add(new StudentClass()
             {
                 ClassId = Convert.ToInt32(objReader["ClassId"]),
                 ClassName = objReader["ClassName"].ToString()
             });
         }
         objReader.Close();
         return list;
     }

然后在窗体初始化方法里面调用并绑定数据:

private StudentClassService objClassService = new StudentClassService();
 
     public FrmAddStudent()
     {
         InitializeComponent();
         //初始化班级下拉框
         this.cboClassName.DataSource = objClassService.GetAllClasses();
         this.cboClassName.DisplayMember = "ClassName";
         this.cboClassName.ValueMember = "ClassId";
 
     }

第二种情况:

SQLHelper类中的代码:

public static DataSet GetDataSet(string sql)
     {
         SqlConnection conn = new SqlConnection(connString);
         //SqlCommand cmd = new SqlCommand(sql, conn);
         SqlDataAdapter da = new SqlDataAdapter(sql, conn);
         DataSet ds = new DataSet();
         da.Fill(ds);
         return ds;
     }

然后在窗体初始化方法里面调用并绑定数据:

1 public partial class FrmVoucherQuery : Form
 2 {
 3     public FrmVoucherQuery()
 4     {
 5         InitializeComponent();
 6         string sql = string.Format("Select FName From t_VoucherGroup Order by FGroupID");
 7         //控件名.DataSource=数据集.数据表
 8         cbVoucherName.DataSource = SQLHelper.GetDataSet(sql).Tables[0];
 9         cbVoucherName.DisplayMember = "FName";
10         cbVoucherName.ValueMember = "FName";
11     }
12 }

相关推荐