c# - 窗口关闭时刷新 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,这样就可以并更新。
感谢您的任何建议,我只是无法弄清楚这一点。
甘格尔
解决方案
推荐阅读
- reactjs - 替换 setState 中特定索引处的数组对象
- clearcase - 等效于 cleartool mkdir 的 mkdir -p
- c++ - 如何在 C++ 中将类成员列为数据结构
- ofbiz - Ofbiz16.11 使用GUI的作业调度
- excel - excel的旋转按钮
- c# - NullReferenceException:对象引用未设置为对象的实例_
- python - 如何在python中打开csv?
- tensorflow - Keras - K.print 在损失函数中不起作用
- mysql - 更新 MariaDB 后如何停止 XAMPP 的 MySQL 服务
- node.js - How do i get nested schema keys from mongoose main model?