首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

哪位高手能帮小弟我看一下

2013-04-20 
谁能帮我看一下?先上个图吧:对,就是省市选择!WPF做的。我的想法是窗口加载时添加“省份”的选项,然后选择省份

谁能帮我看一下?
先上个图吧:
哪位高手能帮小弟我看一下
对,就是省市选择!WPF做的。

我的想法是窗口加载时添加“省份”的选项,然后选择省份(触发SelectionChanged事件)添加“城市”,最后选择城市(同样触发SelectionChanged事件)添加“县”。
添加的时候是这样的:comboxCounty.ItemsSource = list; (list是集合)

我在第一次选择后,所有的Combobox都有选项,然后我再次选择“省份”会添加该省份下的城市,不过这时候发现触发了“城市”的SelectionChanged事件(为什么触发,我想应该是城市中的items有改变),但当前选择的item(SelectedItem)却是null,这时候程序就报错了,所以我想在选择省份的时候清空城市和县的items。于是我就用Items.Clear()方法,发现提示这样一个错误:哪位高手能帮小弟我看一下,不解啊。请问怎么清除啊?或者说怎么解决我这个问题啊?求大神!
以下是我的代码(部分):


private void Window_Loaded(object sender, RoutedEventArgs e) {
            DataTable dataTable = SQLHelper.ExecuteDataSet("select * from Province");
            string[] colNames = { "proId", "proName" };   //声明string数组,并初始化。不指定长度
            //遍历结果集
            cobProvince.ItemsSource = returnArea(dataTable, colNames); //把集合中的对象赋给Combobox的ItemSource集合中
            //cobProvince.SelectedIndex = 0;  
            //加载完后显示第一项。还是不要显示,因为在显示时会触发下面的SelectionChanged事件,然后查询数据库,这样增加了数据库的负担
        }

        /// <summary>
        /// 省份加载后触发该事件,并加载该省份下的城市
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cobProvince_SelectionChanged(object sender, SelectionChangedEventArgs e) {
            Area areaProvince = (Area)cobProvince.SelectedItem;   //表示被选中的对象
            int proId = areaProvince.AreaId;    //省份的Id
            string strSql = "select * from City where proId = @proId;";
            //返回结果集
            DataTable dataTable = SQLHelper.ExecuteDataSet(strSql, new SqlParameter("@proId", proId));
            string[] colNames = new string[3] { "cityId", "cityName", "proId" }; //声明string数组,并初始化。长度为3
            //调用函数,遍历结果集
            cobCity.ItemsSource = returnArea(dataTable, colNames);
        }

        /// <summary>
        /// 城市加载完后触发该事件,并加载该城市下的县
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void cobCity_SelectionChanged(object sender, SelectionChangedEventArgs e) {
            //cobCity.Items.Clear(); 此句会报错
            Area areaCounty = (Area)cobCity.SelectedItem;   //被选中的城市对象
            int proId = areaCounty.AreaProId;  //被选中对象的proId
            string strSql = "select * from City where proId = @proId";  //根据proId得到结果
            DataTable dataTable = SQLHelper.ExecuteDataSet(strSql, new SqlParameter("@proId", proId));
            string[] colNames = { "cityId", "cityName", "proId" };
            cobCounty.ItemsSource = returnArea(dataTable, colNames);    //调用函数返回Area对象集
            //cobCity.SelectedIndex = 0;  //显示市的第一项,避免下面没有选中项
        }

        /// <summary>
        /// 遍历结果集
        /// </summary>
        /// <param name="dataTable">结果集</param>
        /// <param name="colNames">数据库列名</param>
        /// <returns>返回Area对的集合</returns>
        private List<Area> returnArea(DataTable dataTable, string[] colNames) {
            List<Area> listArea = new List<Area>(); //Area集合对象

            //遍历结果集的每一条
            foreach (DataRow dataRow in dataTable.Rows) {
                Area area = new Area();
                area.AreaId = (int)dataRow[colNames[0]];    //返回的是DataRow类型,但proId是int类型
                area.AreaName = (string)dataRow[colNames[1]];
                if (colNames.Length > 2) {
                    area.AreaProId = (int)dataRow[colNames[2]]; //第三个数据库字段
                }
                listArea.Add(area); //把对象添加到集合中
            }
            return listArea;
        }




[解决办法]

引用:
引用:C# code?12345678910111213141516171819        /// <summary>        /// 城市加载完后触发该事件,并加载该城市下的县        /// </summary>        /// <param name="sender"></param>        /// <p……

没什么不好的,逻辑就应该是这样的呀,城市没有,下级的县怎么能有,即使有也应该给清空的

热点排行