Export do excela z GridControl - kontrolka DevExpress, wywołanie metody w innej klasie

0

Na wstępie powiem, że to moje początki z C#.
Mam następujący problem, korzystam z kontrolek z pakietu DevExpress. Poniżej kod metody:

public void ZapiszDaneDoExcela()
        {
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "* .xls | * .xls";            
            dlg.FileName = "Test" + DateTime.Now.ToString("_yyyyMMdd_HHmmss");
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                myGridView1.ExportToXls(dlg.FileName);
                //SprawdzCzyPlikZostalZapisany(dlg.FileName, "Excel");
                Process.Start(dlg.FileName); //otwieranie pliku excela automatycznie po zapisie
            }
        }

Metoda ZapiszDaneDoExcela() znajduje się w klasie z okienkiem Form1. W okienku Form1 jest GridControl z listą danych (myGridView1). Dodałem do tego okienka przycisk w celu testowania prawidłowości działania tej metody i jest wszystko ok, dane ładnie sie eksportują do Excela.

Chciałbym jednak ten eksport przy pomocy tej metody zrobić w inny sposób, tzn. w okienku Form1 mam przycisk "OPCJE". Po jego naciśnięciu otwiera się nowe okienko Form2 z listą opcji. Na tej liście mam pozycję "EXPORT DO EXCELA". Chciałbym, aby po wybraniu tej pozycji metoda z Form1 o nazwie ZapiszDaneDoExcela() robiła ten export. Poniżej mam kod umiejscowiony w Form2 w ramach testów:

private void btnWykonaj_Click(object sender, EventArgs e)
        {
            if(ListBoxControl1.SelectedIndex == 0)
            {
                Form1 excel = new Form1("");
                excel.myGridView1.GetSelectedRows();
                int selectedRowCount = excel.myGridView1.SelectedRowsCount; // dla sprawdzenia ilości wierszy exportowanych
                XtraMessageBox.Show(selectedRowCount.ToString(), "Błąd zapisu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                excel.ZapiszDaneDoExcela();
            }
         }

Okienko komunikatu XtraMessageBox pokazuje, że w myGridView1 jest zaznaczone 0 wierszy i metoda excel.ZapiszDaneDoExcela() eksportuje jedynie same nagłówki kolumn do pliku Excela.

Pomoże mi ktoś rozwiązać ten problem ???

0

Problem prawdopodobnie polega na tym, że w metodzie btnWykonaj_Click() tworzysz nowy obiekt Form1 i wtedy wszystko tam jest "puste"
W metodzie, w której tworzysz i otwierasz Form2 przekaż przez konstruktor Form1 poprzez this czy coś takiego i na tej przekazanej formie wykonaj metodę ZapiszDaneDoExcela()

0

W Form1 jest metoda:

private void btnOpcje_Click(object sender, EventArgs e)
        {
            Form2 opcje = new Form2();
            opcje.Show();
        }

Ta właśnie metoda jak widać wywołuje Form2, w którym chcę wywoływać metodę ZapiszDaneDoExcela(). Tak jak pisałem w C# jestem początkującym i nie wiem jak mam to zrobić. Jak ma w takim wypadku wyglądać metoda btnOpcje_Click() ?

0

Powinieneś mieć coś w stylu:
Form2 opcje = new Form2(this);, czyli Form2 ma konstruktor z parametrem, przez który przekażesz Form1.
Następnie w Form2 powinieneś mieć właściwość, do której przypiszesz przekazany parametr (czyli Form1).
I w metodzie 'btnWykonaj_Click()' pozostaje skorzystać z zapisanej wcześniej właściwości, która przechowuje Form1, zamiast tworzyć ją nowo

0

W Form2 zrobiłem tak:

public Form2(Form1 data)
        {
            InitializeComponent();           
        }

Zaś w Form1 tak jak napisałeś:

Form2 opcje = new Form2(this);

Jak teraz w metodzie btnWykonaj_Click() skorzystać z "data" przy wywołaniu ZapiszDaneDoExcela() oraz jak w takim przypadku wywołać ZapiszDaneDoExcela() ?

1

W Form2 zrób właściwość:

private Form1 Data { get; set; }

W konstruktorze Form2 przypisz parametr do właściwości:

public Form2(Form1 data)
        {
            InitializeComponent();
            Data = data;
        }

A w metoda btnWykonaj_Click() powinna wyglądać tak:

private void btnWykonaj_Click(object sender, EventArgs e)
        {
            if(ListBoxControl1.SelectedIndex == 0)
            {
                Data.myGridView1.GetSelectedRows();
                int selectedRowCount = excel.myGridView1.SelectedRowsCount; // dla sprawdzenia ilości wierszy exportowanych
                XtraMessageBox.Show(selectedRowCount.ToString(), "Błąd zapisu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Data.ZapiszDaneDoExcela();
            }
         }
0

Wielkie dzięki. Działa prawidłowo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1