(9)C#之ADO.NET 两个ListBox联动案例

这次的案例是做两个ListBox的联动,例如第一个ListBox显示的是全国各省份的名称,然后在用户点击某一个省份的同时,第二个ListBox显示出该省份的各城市的名字。

①这需要在数据库中创建一张表格,来保存这些省份以及城市的信息,表格如图:

  

 

②然后利用Insert语句插入数据,这些Insert语句都以及提前准备好了的,只需“新建查询”,然后在执行就好了,如图:

 

③我们在该项目再创建一个类,用来保存Area的各属性:

    class Area
    {
        public int AreaId { get; set; }
        public int AreaPid { get; set; }
        public string AreaName { get; set; }
    }

 

④成功插入之后,我们先写第一个ListBox的代码,这个代码是在窗口加载时候就自动完成的,所以我们写在Window_Loaded事件中:

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DataTable dt = SqlHelper.ExecuteDataTable("select * from AreaFull where AreaPid = 0");
            
            List<Area> list = new List<Area>();
            
            foreach (DataRow dr in dt.Rows)
            {
                Area area = new Area();//因为对象是引用类型,这个对象一定要放到foreach循环里面来申请,才不会造成重复出错,相当于重置对该对象
                area.AreaPid= (int)dr["AreaPid"];
                area.AreaName=(string)dr["AreaName"];
                area.AreaId = (int)dr["AreaId"];
                list.Add(area);
            }
            listBox1.ItemsSource = list;
        }

◇注意:这里很关键的一步,在实例化area类的过程时,一定要在foreach中实例化,这样才不会造成重复显示的错误,因为对象是引用类型。

◇ListBox的ItemsSource的属性是用来确定绑定的数据源的,我们这里利用的是集合类List来存储数据源,然后通过ItemsSource属性绑定到ListBox上。

◇然后一定要在listbox的xaml代码中加上DisplayMemberPath="AreaName",这样才会显示出数据。

 

⑤完成了第一个ListBox,第二个ListBox也就照葫芦画瓢了,只不过第二个ListBox的代码是在我们选择第一个代码的某项时候触发的,所以我们代码将会写在listBox1_SelectionChanged的事件中:、

private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Area area = (Area)listBox1.SelectedItem;
            DataTable dt = SqlHelper.ExecuteDataTable("select * from AreaFull where AreaPid = @Areaid",
                new SqlParameter("@Areaid", area.AreaId));
            List<Area> listCity = new List<Area>();
            foreach (DataRow dr in dt.Rows)
            {
                Area areaCity = new Area();//此处同上原理
                areaCity.AreaPid = (int)dr["AreaPid"];
                areaCity.AreaName = (string)dr["AreaName"];
                listCity.Add(areaCity);
            }
            listBox2.ItemsSource = listCity;
        }

◇完了之后也别忘记添加DisplayMemberPath="AreaName"。

 

这样就OK啦,快试试吧~

posted @ 2015-10-22 15:35  考拉爱喵喵  阅读(1201)  评论(0编辑  收藏  举报