我的wpf应用程序中有一个datagrid。此数据网格从DataSet填充。当我调用我的方法Aktualizuj()一切正常。问题是每当我从另一个类中调用它时它的触发但数据网格保持不变。
主要主要课程
namespace MenadzerTicketow
{
public partial class MainWindow : MetroWindow
{
public void Aktualizuj()
{
try
{
//Some Code
string selectStr = ("select * from " + aktywnatabela + " order by id desc");
SQLiteDataAdapter myAdapter = new SQLiteDataAdapter(selectStr, Start.m_dbConnection);
DataSet dset = new DataSet();
int i = myAdapter.Fill(dset);
dataGrid.ItemsSource = dset.Tables[0].DefaultView;
//MessageBox.Show(dset.GetXml().ToString()); //DataSet is being filled correctyl, thats not a case
//Some
//Code
}
catch (SQLiteException ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
我在下面添加了代码,但问题并没有消失。
dataGrid.ItemsSource = null;
dataGrid.Items.Refresh();
从这里我叫Aktualizuj()
namespace MenadzerTicketow
{
public partial class SDMWindow : MetroWindow
{
//Some Code
private void button_Click(object sender, RoutedEventArgs e)
{
var p = new MainWindow();
p.Aktualizuj();
p.Close();
this.Close();
}
}
}
感谢您的帮助。
答案 0 :(得分:0)
两种情况下你的变量aktywnatabela
是否相同?由于这是MainWindow,那么可能所有的初始化操作都已完成,但DataSet对象是否具有从工作用例中加载的相同行?
答案 1 :(得分:0)
请尝试使用此方法从子窗口控制父窗口。希望这有帮助。
foreach (Window win in Application.Current.Windows.OfType<MainWindow>())
{
var mainWin = ((MainWindow)win);
mainWin.Aktualizuj();
}
答案 2 :(得分:0)
以下代码行创建MainWindow的新实例:
var p = new MainWindow();
因为你永远不会在它上面调用Show()方法,所以你永远不会真正看到它。
对于受影响的MainWindow的已打开的实例中的DataGrid,您需要获取对此特定窗口实例的引用,并在此实例上调用Aktualizuj()方法。您可以使用Application.Current.Windows集合来获取对窗口的引用:
private void button_Click(object sender, RoutedEventArgs e)
{
MainWindow p = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
if (p != null)
p.Aktualizuj();
this.Close();
}
或者您可以使用Application.Current.MainWindow,前提是该窗口实际上是您的应用程序的主窗口:
private void button_Click(object sender, RoutedEventArgs e)
{
MainWindow p = Application.Current.MainWindow as MainWindow;
if (p != null)
p.Aktualizuj();
this.Close();
}