WPF:使用与数据表绑定的列表框中的值
本文关键字:列表 绑定 数据表 WPF | 更新日期: 2023-09-27 18:29:34
我是新来的,这是我的第一个问题。
我正在设计一个文本块,当我更改文本时,它可以查询我的数据库。之后,用户可以在列表框中选择一个值,然后文本块应该将其值更改为已选择的值。
当我使用Messagebox.Show时,我成功地检索到了我在列表框中选择的值,但当我再次更改文本块中的值,或者我想更改文本块的值时,VS显示一条带有System.NullReferenceException的错误消息。
我想了解根本原因,这样我将来就可以避免它。我还想知道是否可以从列表框中重定时多个记录。非常感谢!
下面是我的XAML代码:
<Grid>
<Label Content="Label" HorizontalAlignment="Left" Margin="40,38,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="Searchbox" HorizontalAlignment="Left" Height="23" Margin="85,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="216" TextChanged="Read_DB"/>
<Button Content="Button" HorizontalAlignment="Left" Height="24" Margin="321,37,0,0" VerticalAlignment="Top" Width="70"/>
<ListBox x:Name="result_box" ItemsSource="{Binding}" Margin="85,61,216,155" SelectionChanged="result_box_SelectionChanged" />
</Grid>
以下是背后的代码:
public MainWindow()
{
InitializeComponent();
}
private void Read_DB(object sender, TextChangedEventArgs e)
{
SQLite_Class SQLite = new SQLite_Class();
string sql_command = "Select * from mytable where name like '%" +Searchbox.Text + "%' limit 10";
DataTable listdata = SQLite.data_query(sql_command, "mydb.db");
result_box.Visibility = Visibility.Visible;
result_box.ItemsSource = listdata.DefaultView;
result_box.DisplayMemberPath = "name";
result_box.SelectedValuePath = "ID";
}
private void result_box_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox lb = sender as ListBox;
DataRowView view = lb.SelectedItem as DataRowView;
string test = view["ID"].ToString();
MessageBox.Show(test);
Searchbox.Text = test;
//result_box.Visibility = Visibility.Hidden;
}
最后我找到了一个解决方案。只需要在datarowview不为null时更改show操作就可以完美地解决这个问题。
private void result_box_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataRowView view = result_box.SelectedItem as DataRowView;
if (view != null)
{
MessageBox.Show(view["ID"].ToString());
Searchbox.Text = view["ID"].ToString();
}
}