C# DataGrid tidak terisi saat dipanggil dari Kelas lain

Saya memiliki datagrid di aplikasi wpf saya. Datagrid ini diisi dari DataSet. Ketika saya memanggil metode saya Aktualizuj() semuanya berfungsi dengan baik. Masalahnya adalah setiap kali saya memanggilnya dari kelas lain, pemicunya tetapi datagrid tetap tidak berubah.

Kelas utama utama

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);
            }
        }
    }
}

Saya telah menambahkan kode di bawah ini, tetapi masalahnya tidak hilang.

 dataGrid.ItemsSource = null;
 dataGrid.Items.Refresh();

Dan dari sini saya memanggil 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();
        }
    }
}

Terima kasih untuk bantuannya.


person Rasiel    schedule 04.01.2017    source sumber
comment
Tolong jelaskan masalah Anda lebih detail. Seperti MainWindow Anda yang mana dan dari mana Anda membuka SDMWindow, dll.   -  person DT sawant    schedule 04.01.2017
comment
SDMWindow dibuka di MainWindow dengan tombol ` SDMWindow win4 = new SDMWindow(); win4.Show();` Masalah saya adalah Aktualizuj() ketika dipanggil dari SDMWindow tampaknya berfungsi dengan baik tetapi dataGrid tetap tidak berubah.   -  person Rasiel    schedule 04.01.2017


Jawaban (3)


Baris kode berikut membuat instance baru dari MainWindow:

var p = new MainWindow();

Karena Anda tidak pernah memanggil metode Show() di dalamnya, Anda tidak akan pernah benar-benar melihatnya.

Agar DataGrid di instance yang sudah dibuka di MainWindow Anda terpengaruh, Anda perlu mendapatkan referensi ke instance jendela khusus ini dan memanggil metode Aktualizuj() yang satu ini. Anda dapat menggunakan koleksi Application.Current.Windows untuk mendapatkan referensi ke jendela:

private void button_Click(object sender, RoutedEventArgs e)
{
    MainWindow p = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
    if (p != null)
        p.Aktualizuj();

    this.Close();
}

Atau Anda dapat menggunakan Application.Current.MainWindow asalkan jendela tersebut sebenarnya adalah jendela utama aplikasi Anda:

private void button_Click(object sender, RoutedEventArgs e)
{
    MainWindow p = Application.Current.MainWindow as MainWindow;
    if (p != null)
        p.Aktualizuj();

    this.Close();
}
person mm8    schedule 04.01.2017
comment
Terima kasih banyak :) Berhasil dan sekarang saya mengerti masalahnya. - person Rasiel; 05.01.2017

Apakah variabel aktywnatabela Anda sama di kedua kasus? Karena ini adalah MainWindow, maka mungkin semua tindakan inisialisasi telah selesai tetapi apakah objek DataSet memiliki baris yang sama yang dimuat dari DB seperti pada kasus kerja?

person Rafichu    schedule 04.01.2017
comment
Ya aktywnatabela sama, tapi menurut saya itu tidak penting karena datasetnya terasa OK (saya memeriksanya dengan menggunakan MessageBox.Show(dset. GetXml (). ToString ()); ) Baris dataset harus berubah, ketika saya memanggil metode Aktualizuj() dari tombol yang terletak di kelas utama maka baris baru ditambahkan . Setelah menelepon dari kelas lain saya melihat dsetberisi data baru, jadi mungkin masalahnya ada di tempat lain. - person Rasiel; 04.01.2017

Silakan coba pendekatan ini yang saya gunakan untuk mengontrol jendela Induk dari jendela anak. Semoga ini bisa membantu..

foreach (Window win in Application.Current.Windows.OfType<MainWindow>())
    {
        var mainWin = ((MainWindow)win);
        mainWin.Aktualizuj();
    }
person Kay Lee    schedule 04.01.2017