Ado.Net實現簡易(省、市、縣)三級聯動查詢,還附加Access數據


  1. 小弟在博客園駐園不久,初來咋到;將最近寫的小程序附上,希望各位大牛們吐槽;激發對程序員圍觀的童鞋們,趕緊加入IT行業,如果你在上海那簡稱就是SHIT,哈哈題外話,以下開始切入正題:

坐公交車是旁邊偶遇一小朋友,對我天朝區域不甚了解,為了偶的下一代不走回頭路,激發愛國熱情,故寫下以下代碼:

需求:

  1. 讀取本地數據庫(文本、Access);
  2. 根據省、市、縣數據庫切換,顯示子級、父級;

以下是成形圖:

實現步驟:

  1. 編寫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;
        }

總結:

  1. 程序中主要用到數據轉換對象的思想(Data——》Object);
  2. Ato.net本身提供的數據訪問類;

需要數據庫及源碼的直接回復我

如在過程中提示未注冊驅動,請到以下地址:下載安裝即可

http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM