1. 程式人生 > >Winform開發中如何將數據庫字段綁定到ComboBox控件

Winform開發中如何將數據庫字段綁定到ComboBox控件

一個 顯示 orm 數據庫字段 mbo reader behavior form net

最近開始自己動手寫一個財務分析軟件,由於自己也是剛學.Net不久,所以自己寫的的時候遇到了很多問題,希望通過博客把一些印象深刻的問題記錄下來。

Winform開發中如何將數據庫字段綁定到ComboBox控件

1.問題引入

在開發中用到了ComboBox控件,也就是實現下拉選擇功能的控件。但是選項的 數據並不是固定的,而是要根據數據庫中的某一列進行動態的調整。

2.解決思路

這裏我大概考慮了兩種情況,一種是下拉列表的選擇項是項目中的實體類某一屬性,或者項目其他要用到該屬性對應的數據庫主鍵。

這種情況主要是把實體對象通過SqlDataReader方法讀取並封裝到集合中,然後再綁定數據。

而我這裏的情況是只需要顯示對應的屬性就好,使用的是SqlDataAdapter方法讀取數據 ,然後在控件所在窗體初始化的時候把數據綁定。

3.參考代碼

第一種情況:

SQLHelper類中的代碼:

 1 public static SqlDataReader GetReader(string sql)
 2     {
 3         SqlConnection conn = new SqlConnection(connString);
 4         SqlCommand cmd = new SqlCommand(sql, conn);
 5         try
 6         {
 7             conn.Open();
 8             return cmd.ExecuteReader(CommandBehavior.CloseConnection);
9 } 10 catch (Exception ex) 11 { 12 conn.Close(); 13 //將錯誤信息寫入日誌... 14 15 throw ex; 16 } 17 }

封裝到集合中:

 1 public List<StudentClass> GetAllClasses()
 2     {
 3         string sql = "select ClassName,ClassId from StudentClass
"; 4 SqlDataReader objReader = SQLHelper.GetReader(sql); 5 List<StudentClass> list = new List<StudentClass>(); 6 while (objReader.Read()) 7 { 8 list.Add(new StudentClass() 9 { 10 ClassId = Convert.ToInt32(objReader["ClassId"]), 11 ClassName = objReader["ClassName"].ToString() 12 }); 13 } 14 objReader.Close(); 15 return list; 16 }

然後在窗體初始化方法裏面調用並綁定數據:

 1  private StudentClassService objClassService = new StudentClassService();
 2 
 3     public FrmAddStudent()
 4     {
 5         InitializeComponent();
 6         //初始化班級下拉框
 7         this.cboClassName.DataSource = objClassService.GetAllClasses();
 8         this.cboClassName.DisplayMember = "ClassName";
 9         this.cboClassName.ValueMember = "ClassId";
10 
11     }

第二種情況:

SQLHelper類中的代碼:

1  public static DataSet GetDataSet(string sql)
2     {
3         SqlConnection conn = new SqlConnection(connString);
4         //SqlCommand cmd = new SqlCommand(sql, conn);
5         SqlDataAdapter da = new SqlDataAdapter(sql, conn);
6         DataSet ds = new DataSet();
7         da.Fill(ds);
8         return ds;
9     }

然後在窗體初始化方法裏面調用並綁定數據:

 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 }

Winform開發中如何將數據庫字段綁定到ComboBox控件