c# - 在我编辑其 itemssource(这是一个 DB)后,我无法更新列表框的内容
问题描述
我在 wpf 应用程序中有一个列表框,它从后台的 .mdf 本地数据库中获取其显示的数据。我有一个向列表框添加新数据的表单,但我无法让列表框更新/刷新以显示新添加的数据。
我的代码:
private void Add_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
if (tb_Mitarbeiter_Nachname.Text == "" && tb_Mitarbeiter_Vorname.Text == "")
{
MessageBox.Show("Leer");
} else
{
Mitarbeiter ma = new Mitarbeiter
{
Vorname = tb_Mitarbeiter_Vorname.Text,
Nachname = tb_Mitarbeiter_Nachname.Text,
Belastung = 0
};
dataContext.Mitarbeiter.InsertOnSubmit(ma);
dataContext.SubmitChanges();
}
UpdateMitarbeiterList();
}
public void UpdateMitarbeiterList()
{
lb_Mitarbeiter.ItemsSource = null;
lb_Mitarbeiter.ItemsSource = dataContext.Mitarbeiter;
lb_Mitarbeiter.SelectedValuePath = "Id";
}
还有我的 .xaml:
<ListBox x:Name="lb_Mitarbeiter"
Height="250"
Margin="2"
BorderThickness="1"
Style="{StaticResource VirtualisedMetroListBox}"
ItemTemplate="{StaticResource lbMitarbeiterTemplate}"
/>
<Window.Resources>
<DataTemplate x:Key="lbMitarbeiterTemplate">
<StackPanel FlowDirection="LeftToRight" Orientation="Horizontal">
<TextBlock Text="{Binding Path=Vorname}"></TextBlock>
<TextBlock Text=" "></TextBlock>
<TextBlock Text="{Binding Path=Nachname}"></TextBlock>
</StackPanel>
</DataTemplate>
</Window.Resources>
将我的列表框的 ItemsSource 设置为 null,然后再次添加 ItemsSource 不起作用。
快速更新:我摆弄了一下,发现了一些奇怪的东西。我也调用 UpdateMitarbeiterList(); 应用程序 _OnLoad 方法中的方法。如果我不在那里调用它,但只有在我向数据库添加了一个新项目之后,它才会在列表框中显示这两个项目。因此,即使我将它设置为 null 并再次添加它,它似乎也没有正确地重新应用 ItemsSource。
编辑:添加了带有数据库定义的整个代码。
public partial class MainWindow : MetroWindow
{
LinqToSqlDataClassesDataContext dataContext;
public MainWindow()
{
InitializeComponent();
ThemeManager.ChangeAppStyle(Application.Current, ThemeManager.GetAccent("Red"), ThemeManager.GetAppTheme("BaseLight"));
string connectionString = ConfigurationManager.ConnectionStrings["SCVT_Aufgabenplaner.Properties.Settings.SCVT_Aufgabenplaner_DBConnectionString"].ConnectionString;
dataContext = new LinqToSqlDataClassesDataContext(connectionString);
}
private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
{
UpdateMitarbeiterList();
}
public void UpdateMitarbeiterList()
{
lb_Mitarbeiter.ItemsSource = null;
lb_Mitarbeiter.ItemsSource = dataContext.Mitarbeiter;
lb_Mitarbeiter.SelectedValuePath = "Id";
}
#region Button Click Methoden
private void Add_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
if (tb_Mitarbeiter_Nachname.Text == "" && tb_Mitarbeiter_Vorname.Text == "")
{
MessageBox.Show("Leer");
} else
{
Mitarbeiter ma = new Mitarbeiter
{
Vorname = tb_Mitarbeiter_Vorname.Text,
Nachname = tb_Mitarbeiter_Nachname.Text,
Belastung = 0
};
dataContext.Mitarbeiter.InsertOnSubmit(ma);
dataContext.SubmitChanges();
}
UpdateMitarbeiterList();
}
private void del_Mitarbeiter_btn_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(lb_Mitarbeiter.SelectedValue.ToString());
}
#endregion
}
数据库定义:
CREATE TABLE [dbo].[Mitarbeiter] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Vorname] VARCHAR (50) NOT NULL,
[Nachname] VARCHAR (50) NOT NULL,
[Belastung] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
解决方案
推荐阅读
- python-3.x - 如何在 Tkinter 中显示连续的解码字节串流?
- html - 表单操作按钮不提交
- java - 使用 MongoTemplate 时如何将类型从 ObjectId 转换为 Long?
- python - 使用 interp1d 进行 Python 插值:线性和二次类型都给出相同的结果
- python - 作为 Spark-scala 应用程序的一部分运行 pyspark 脚本
- python-3.x - 如何抑制detectObjectsFromImage()中的输出图像生成?
- linux - 如何找到内核 4.19.23 提交哈希?
- symfony - 教义通告参考
- javascript - 我们如何从快速会话中读取动态变化的值并在角度前端显示该值
- javascript - Chart.js PHP 数据库数据不显示