首页 > 解决方案 > 窗口关闭时刷新 WPF MVVM Datagrid

问题描述

我在 SE 上看到了一些针对此类问题的回复,但似乎没有得到完全回答。

我有一个具有数据网格(frmOpenOrders.tblOpenOrders)的窗口。

窗口列出程序上的所有未结订单。

我相信我已经正确绑定了它,但这是我的第一个 WPF MVVM 项目。

XAML:

<DataGrid x:Name="tblOpenOrders"  ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2" 
                  IsReadOnly="true" RowHeaderWidth="0"    AutoGenerateColumns="False" CanUserAddRows="False">

CS:

private BindableCollection<ViewModel.openOrder> CurrentOpenOrders { get; set; }
private void loadData()
        {
            
            string sqlString = @"SELECT tblOrder.orderID, firstName, lastName, tblOrder.itemName, tblOrder.itemQuantity, tblStaff.StaffName AS orderedBy, Format([createdDate],""hh:nn am/pm"") AS orderTime, Format([createdDate],""dd mmm"") AS orderDate
                                    FROM tblStaff INNER JOIN tblOrder ON tblStaff.staffID = tblOrder.createdBy WHERE orderedBy is null";


            using (OleDbConnection con = new OleDbConnection(cstring.con))
            {
                using (OleDbDataAdapter fillDA = new OleDbDataAdapter(sqlString, cstring.con))
                {

                    con.Open();
                    DataTable dt = new DataTable("tableData");
                    fillDA.Fill(dt);
                    con.Close();



                    CurrentOpenOrders = new BindableCollection<ViewModel.openOrder>();

                    foreach (DataRow dr in dt.Rows)
                    {
                        CurrentOpenOrders.Add(new ViewModel.openOrder
                        {
                            orderID = Convert.ToInt32(dr["orderID"].ToString()),
                            firstName = dr["firstName"].ToString(),
                            lastName = dr["lastName"].ToString(),
                            orderedBy = dr["orderedBy"].ToString(),
                            itemName = dr["itemName"].ToString(),
                            itemQuantity = Convert.ToInt32(dr["itemQuantity"].ToString()),
                            orderedTime =dr["orderTime"].ToString(),
                            orderedDate = dr["orderDate"].ToString()

                        });
                        
                        
                    }
                    tblOpenOrders.DataContext = CurrentOpenOrders;
                }
            }
        }

视图模型:

public class ViewModel
    {

        public class openOrder
        {
            public int orderID { get; set; }
            public string orderedDate { get; set; }
            public string orderedTime { get; set; }
            public string firstName { get; set; }
            public string lastName { get; set; }
            public string itemName { get; set; }
            public int itemQuantity { get; set; }
            public string orderedBy { get; set; }
        }
    }

它似乎工作正常,但我很高兴就其中的错误提供建议。

现在在 Datagrid 上,我有一个按钮可以打开一个子窗口以记录该行(frmProcessOrder) 这也可以正常工作。

我需要的是在我关闭孩子时更新Window1 (tblOpenOrders)上的数据网格。几乎(frmProcessOrder)关闭,这应该从数据网格中删除该记录,因为该订单已被处理。

我的理解是我需要更新可绑定集合......?

我的另一个选择是在我打开孩子时关闭 frmOpenOrders,然后当孩子打开时我将重新打开 frmOpenOrders,这样就可以并更新。

感谢您的任何建议,我只是无法弄清楚这一点。

甘格尔

标签: c#wpfmvvmdatagrid

解决方案


推荐阅读