我正在开发一个WPF字典应用程序。我的XAML代码中有一个列表框和一个文本框,根据文本框中的用户输入,必须过滤数据集,列表框必须只显示相关的行。 例如:如果用户在文本框中输入“t”,则列表框必须只显示“电视”等字样 我的问题是,当表单加载时,列表框中会填充50个单词,但是当我在文本框中键入任何内容时,列表框将变为空白。 我曾尝试使用过滤数据集本身,但总是有错误可以有人帮助我吗?我怎么能这样做?
我的代码在这里
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using System.Data.OleDb;
using System.ComponentModel;
namespace DictionaryM
{
/// <summary>
/// Interaction logic for Dictionary.xaml
/// </summary>
public partial class Dictionary : Window
{
public ICollectionView view;
public Dictionary()
{
InitializeComponent();
BindData();
}
public void BindData()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\CellBiology.mdb;Persist Security Info=True");
con.Open();
string sql = "Select Word from Dictionary";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
da.Fill(ds, "Word");
listBox1.DataContext = ds;
}
catch (Exception ex)
{
label1.Content = ex.Message;
}
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
// i dont know what will i code here?
}
}
thanks everyone who response this question
答案 0 :(得分:0)
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
listBox1.Items.Filter =
(value) =>
{
DataRow row = value as DataRow;
if (row != null)
{
if (row["Word"].ToLower().StartsWith(textBox1.Text.ToLower())
return true;
}
return false;
};
}
(实际上我不确定这些项目的实际类型,可能是DataRowView,而不是DataRow ......)
答案 1 :(得分:0)
listBox1.Items.CanFilter
当Items是DataSet时,返回false,因此它不起作用。