从其他类调用时,C#DataGrid不会填满

时间:2017-01-04 11:42:11

标签: c# wpf datagrid

我的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();
        }
    }
}

感谢您的帮助。

3 个答案:

答案 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();
}