(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、服务端查询数据库代码
//查询全国的车次,用于车次下拉框的模糊查询
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