最近開始自己動手寫一個財務分析軟體,由於自己也是剛學.Net不久,所以自己寫的的時候遇到了很多問題,希望通過博客把一些印象深刻的問題記錄下來。 Winform開發中如何將資料庫欄位綁定到ComboBox控制項 1.問題引入 在開發中用到了ComboBox控制項,也就是實現下拉選擇功能的控制項。但是選項的 ...
最近開始自己動手寫一個財務分析軟體,由於自己也是剛學.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 }