[英]Datagrid add items to datatable from another window
我的程序在这里遇到了一些问题。 我试图将项目添加到我的数据表中,然后将其显示在我的数据网格上。 我可以使用主页上的简单代码来完成此操作,但是我希望外部页面将结果发送给我,但在这里我找不到我做错了什么。
主窗口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
namespace Træner_Program
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Display();
}
public DataTable dt = new DataTable();
public DataTable dtBind = new DataTable();
public void Display()
{
//I create the data in memory
//usually the date is get from DataBase and cached in memory to enhance the performance
dt = new DataTable();
dt.Columns.Add("Øvelse");
dt.Columns.Add("Vægt");
dt.Columns.Add("Sæt");
dt.Columns.Add("Gentagelser");
dt.Columns.Add("Pause");
dtBind = dt.Copy();
Binding bind = new Binding();
bind.Source = dtBind;
this.dtgPlan.SetBinding(ListView.ItemsSourceProperty, bind);
}
public void AddRow(string Øvelse, string Vægt, string Sæt, string Gentagelser, string Pause)
{
DataRow dr = dt.NewRow();
dr["Øvelse"] = Øvelse;
dr["Vægt"] = Vægt;
dr["Sæt"] = Sæt;
dr["Gentagelser"] = Gentagelser;
dr["Pause"] = Pause;
dt.Rows.Add(dr);
dtBind = dt.Copy();
Binding bind = new Binding();
bind.Source = dtBind;
this.dtgPlan.SetBinding(ListView.ItemsSourceProperty, bind);
}
private void btnGem_Click(object sender, RoutedEventArgs e)
{
//this is the working command from mainpage
//AddRow("Bænkpres", "80", "3", "10", "50");
}
private void btnTilføj_Click(object sender, RoutedEventArgs e)
{
var tilføjØvelse = new Tilføj_Øvelse();
tilføjØvelse.Show();
}
}
}
新增项目
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Træner_Program
{
/// <summary>
/// Interaction logic for Tilføj_Øvelse.xaml
/// </summary>
public partial class Tilføj_Øvelse : Window
{
MainWindow mw = new MainWindow();
public Tilføj_Øvelse()
{
InitializeComponent();
}
private void btnTilføj_Click(object sender, RoutedEventArgs e)
{
mw.AddRow("Bænkpres", "80", "3", "10", "50");
Close();
}
private void btnAnuller_Click(object sender, RoutedEventArgs e)
{
Close();
}
}
}
这是因为您正在创建一个新的MainWindow,而不是使用调用子窗口的初始窗口。
一个简单的解决方法是将对父MainWindow的引用传递给Child,如下所示:
更新孩子:
public partial class Tilføj_Øvelse : Window
{
MainWindow mw;
public Tilføj_Øvelse(MainWindow mainWindow)
{
InitializeComponent();
mw = mainWindow;
}
private void btnTilføj_Click(object sender, RoutedEventArgs e)
{
mw.AddRow("Bænkpres", "80", "3", "10", "50");
Close();
}
private void btnAnuller_Click(object sender, RoutedEventArgs e)
{
Close();
}
}
然后将其更新为:
private void btnTilføj_Click(object sender, RoutedEventArgs e)
{
var tilføjØvelse = new Tilføj_Øvelse(this);
tilføjØvelse.Show();
}
但是,最好的(也是推荐的)方法是使用MVVM模式并为这两个Windows创建共享的ViewModel。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.