(C#)WPF类似下拉框的自动完成源,数据是从数据库查询得出动态数据

1、sql数据库


      --查询全国的车次,用于车次下拉框的模糊查询
    if @type='cbo_TrainAll'
    begin
    select AllTrain=stuff
    (
    (select '@'+rtrim(train_name) from t_train_list where no_running=0  for xml path('')),1,1,'')
    end
2、服务端查询数据库代码
 //查询全国的车次,用于车次下拉框的模糊查询
        [ OperationContract ]
         public   DataSet  cbo_TrainAll()
        {
             DataSet  ds =  new   DataSet ();
             SqlParameter [] mySqlParameter =
                       {
                 new   SqlParameter ( "@type" , SqlDbType .NChar)
            };
            mySqlParameter[0].Value =  "cbo_TrainAll" ;
             DataTable  myDataTable = myDAL.QueryDataTable( "wpfComboboxBingding" , mySqlParameter);
            ds.Tables.Add(myDataTable);
             return  ds;
        }  
3、页面设计,使用文本框、按钮、listbox组成
 
4、页面的.CS代码
     //建立一个属性表,用于装载数据
        internal class StationModel
        {
            public string KeyID { setget; }  // 车站ID    
            public string Name { setget; }  // 名称   
            public string PYString { setget; }   // 名称拼音
            public string ShortPYString { setget; }   // 拼音简码
        }
        BLL_TrainWay.BLL_TrainWayClient bll_TrainWay = new BLL_TrainWay.BLL_TrainWayClient();
        BLL_BingdingCombobox.BLL_BingdingComboboxClient bll_Cbo = new BLL_BingdingCombobox.BLL_BingdingComboboxClient();       
        internal List<StationModel> TrainStationList = new List<StationModel>();
        TextBox txt;     
        //窗口的Loaded加载事件
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
             
            //查找出数据库所有的列出信息,并加入到list集合里   
            DataTable dt = bll_Cbo.cbo_TrainAll().Tables[0];
            string station_names = dt.Rows[0]["AllTrain"].ToString().Trim();
            TrainStationList = new List<StationModel>();
            string[] citys = station_names.Split('@');
            if (citys != null)
            {
                for (int i = 0; i < citys.Length; i++)
                {
                    StationModel info = new StationModel();
                    info.Name = citys[i];
                    TrainStationList.Add(info);
                }
            }
        }
        #region  下拉框自动完成源
        //列车车次文本框改变事件
        private void txt_TrainName_TextChanged(object sender, TextChangedEventArgs e)
        {
            //设置一个位置坐标,用于调整listbox的位置
            Thickness margin = new Thickness(546, 37, 0, -100);
            //获取文本框的值
            string str = txt_TrainName.Text.Trim();
            //list_TrainName-listbox的控件名称,TrainStationList声明的集合变量
            setTrainText(str, margin, list_TrainName, TrainStationList);
        }
        //设置列車listbox的内容
        internal void setTrainText(string str, Thickness margin, ListBox list_TrainName, List<StationModel> statt)
        {
            List<StationModel> list = statt.FindAll((station) => {
                return station.Name.IndexOf(str) > -1;
            });
            if (list.Count > 0)
            {
                list_TrainName.Margin = margin;
                list_TrainName.ItemsSource = list;
                list_TrainName.DisplayMemberPath = "Name";
                Panel.SetZIndex(list_TrainName, 99);
                list_TrainName.Height = 100;
                list_TrainName.Visibility = Visibility.Visible;
            }
            else
            {
                list_TrainName.Visibility = Visibility.Hidden;
                Panel.SetZIndex(list_TrainName, 0);
                list_TrainName.ItemsSource = null//清空数据源
            }
        }
        //listbox鼠标选中左边单击事件
        private void list_TrainName_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            try
            {
                //获取选中的数据,绑定到文本框
                txt_TrainName.Text = (list_TrainName.SelectedItem as StationModel).Name;
                //将listbox隐藏
                this.list_TrainName.Visibility = Visibility.Hidden;
            }
            catch { }
        }
        //按钮单击事件,显示全部列出信息
        private void btn_trainName_Click(object sender, RoutedEventArgs e)
        {
            Thickness margin = new Thickness(546, 37, 0, -100);            
            btn_GetSiteName(margin, list_TrainName, TrainStationList);
        }
        //将数据显示到listbox上面
        internal void btn_GetSiteName(Thickness margin, ListBox list_TrainName, List<StationModel> statt)
        {
            list_TrainName.Margin = margin;
            list_TrainName.ItemsSource = statt;
            list_TrainName.DisplayMemberPath = "Name";
            Panel.SetZIndex(list_TrainName, 99);
            list_TrainName.Visibility = Visibility.Visible;
        }
        #endregion

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值