当前位置: 移动技术网 > IT编程>开发语言>.net > Ado.Net实现简易(省、市、县)三级联动查询,还附加Access数据

Ado.Net实现简易(省、市、县)三级联动查询,还附加Access数据

2018年04月25日  | 移动技术网IT编程  | 我要评论

倪夏冰,我的心好冷歌词,优酷会员共享一人一号

小弟在博客园驻园不久,初来咋到;将最近写的小程序附上,希望各位大牛们吐槽;激发对程序员围观的童鞋们,赶紧加入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本身提供的数据访问类;

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网