【问题标题】:How to update listview once a new SQL row has been inserted?插入新的 SQL 行后如何更新列表视图?
【发布时间】:2019-04-04 09:55:35
【问题描述】:

我在WPF APP中有两个窗口,在第一个窗口中管理员会添加工单信息,在其他窗口中,员工应该显示所有工单的列表,一旦有新工单已添加(自动)。 在下面的简单代码上:

//On User Window, set the itemSource
     DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.AJFactoryConnectionString);
     public MainWindow() 
      {
        if (dc.DatabaseExists()) AllTasksListView.ItemsSource = dc.TicketTables;};
//List View 
<ListView Name="AllTasksListView" >
//Admin Window that allow him to add anew ticekt 
  public DataClasses1DataContext dc = new DataClasses1DataContext(Properties.Settings.Default.AJFactoryConnectionString);
        public void InsertNewTickt(string Status,string Descrption)
        {
            TicketTable x = new TicketTable
            {
                CreatedDate = DateTime.Now,
                Status = Status,
                DeliveryDate = DateTime.Now,
                Descrption = Descrption

            };
            dc.TicketTables.InsertOnSubmit(x);
            try
            {
                dc.SubmitChanges();
            }
            catch (Exception ee)
            {
                dc.SubmitChanges();
            }
}

一旦管理员添加新票证(sql 中的新行),我需要一种立即更新listview 的好方法。我是 WPF 的新手,我找到了很多解决方案,但在同一个窗口中,就我而言,我有 2 个窗口。

【问题讨论】:

标签: c# wpf listview binding linq-to-sql


【解决方案1】:

ListViewItemsSource 设置为ObservableCollection&lt;TicketTable&gt;,并将新创建的TicketTable 对象添加到该对象。管理窗口需要引用 MainWindow 才能正常工作。您可以使用引用注入它,也可以从 Application.Current.Windows 属性中获取一个。

主窗口:

if (dc.DatabaseExists()) 
    AllTasksListView.ItemsSource = new ObservableCollection<TicketTable>(dc.TicketTables);

管理窗口:

...
dc.TicketTables.InsertOnSubmit(x);
dc.SubmitChanges();
var mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
if (mainWindow != null)
{
    var sourceCollection = mainWindow.AllTasksListView as ObservableCollection<TicketTable>;
    if (sourceCollection != null)
        sourceCollection.Add(x);
}

【讨论】:

  • 如果我在管理员电脑上运行第一台电脑,在其他电脑上运行其他窗口,这个解决方案是否有效?
  • 当然不是。然后你在两台不同的机器上运行两个不同的进程,这是一个完全不同的话题。
  • 我会在本地测试并给你反馈,我正在努力寻找解决这个stackoverflow.com/questions/53086524/…
  • @MikeDarwish:这是一个完全不同的问题。
  • mm8,我知道,这就是为什么我要在 2 台上测试它
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多