(C#)WPF类似下拉框的自动完成源,数据是从数据库查询得出动态数据
2017-05-31 10:20
483 查看
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 { set; get; } // 车站ID
public string Name { set; get; } // 名称
public string PYString { set; get; } // 名称拼音
public string ShortPYString { set; get; } // 拼音简码
}
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
--查询全国的车次,用于车次下拉框的模糊查询
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 { set; get; } // 车站ID
public string Name { set; get; } // 名称
public string PYString { set; get; } // 名称拼音
public string ShortPYString { set; get; } // 拼音简码
}
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
相关文章推荐
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 转:c# winform comboBox动态下拉列表,comboBox动态绑定数据库里的数据
- C# WPF 快速开发11导入txt数据到数据库
- 数据查询基础和C#连接数据库语句
- c#从数据库读取数据动态生成树形菜单
- C#实现对数据库中的表的查询、添加、修改、删除数据
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- C#通过ODBC查询HANA数据库数据
- 数据库数据导入导出系列之五 C#实现动态生成Word(转)
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?[转]
- C#中通过OLE方式连接informix数据库与查询数据方式
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
- C# windows 服务 数据库 读取数据 自动邮件
- C#中动态创建数据库和数据表,很经典【转】
- C# - 反射学习,附带绑定实体类从数据库查询数据中,带源码学习!
- WPF实现TextBox输入文字后自动弹出数据(类似百度的输入框)
- 从数据库随机查询出一批数据并排序输出——C#中DataTable技术学习
- 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
- c#中动态创建textbox并且从数据库中获取表中数据添加到textbox中