- 小弟在博客園駐園不久,初來咋到;將最近寫的小程序附上,希望各位大牛們吐槽;激發對程序員圍觀的童鞋們,趕緊加入IT行業,如果你在上海那簡稱就是SHIT,哈哈題外話,以下開始切入正題:
坐公交車是旁邊偶遇一小朋友,對我天朝區域不甚了解,為了偶的下一代不走回頭路,激發愛國熱情,故寫下以下代碼:
需求:
- 讀取本地數據庫(文本、Access);
- 根據省、市、縣數據庫切換,顯示子級、父級;
以下是成形圖:

實現步驟:
- 編寫SqlHelper類(主要解決查詢操作),代碼如下
private static readonly string accessConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Directory.GetCurrentDirectory() + (@"\Areafull.accdb"); /// <summary> /// 查詢access數據,返回table /// </summary> /// <param name="sql">執行sql</param> /// <param name="parameters">查詢參數</param> /// <returns></returns> public static DataTable ExecuteAccessDateTable(string sql, params SqlParameter[] parameters) { using (OleDbConnection cnn = new OleDbConnection(accessConn)) { cnn.Open(); using (OleDbCommand cmd = cnn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); OleDbDataReader apter = cmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(apter); return dt; } } }
2.界面設計
三個ListBox控件分別放入,省,市,縣
/// <summary> /// 初始化加載省數據 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_Loaded(object sender, RoutedEventArgs e) { DataTable table = SqlHelper.ExecuteAccessDateTable("select * from areafull where AreaPid='0'"); SlB.ItemsSource = GetAreas(table);//省份綁定 } /// <summary> /// 省數據選擇 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SlB_SelectionChanged(object sender, SelectionChangedEventArgs e) { Area areaRow = (Area)SlB.SelectedItem; DataTable table = SqlHelper.ExecuteDateTable("select * from areafull where AreaPid=@AreaPid", new SqlParameter("@AreaPid", areaRow.AreaId)); SJBX.ItemsSource = GetAreas(table); } /// <summary> /// 市級數據選擇 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SJBX_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (SJBX.SelectedItem != null) { Area areaRow = (Area)SJBX.SelectedItem; DataTable table = SqlHelper.ExecuteDateTable("select * from areafull where AreaPid=@AreaPid", new SqlParameter("@AreaPid", areaRow.AreaId)); XJBX.ItemsSource = GetAreas(table); } else { XJBX.ItemsSource = null; } } /// <summary> /// 數據轉換對象 /// </summary> /// <param name="table"></param> /// <returns></returns> private List<Area> GetAreas(DataTable table) { List<Area> lst = new List<Area>(); foreach (DataRow item in table.Rows) { Area are = new Area(); are.AreaId = Convert.ToInt32(item["Areaid"]); are.AreaName = item["AreaName"].ToString(); are.AreaPid = Convert.ToInt32(item["AreaPid"]); lst.Add(are); } return lst; }
總結:
- 程序中主要用到數據轉換對象的思想(Data——》Object);
- Ato.net本身提供的數據訪問類;
需要數據庫及源碼的直接回復我
如在過程中提示未注冊驅動,請到以下地址:下載安裝即可
