DataGridView i menu

0

Witam.
Mam taki problem.
W DataGridView robię sobie małe zestawienie. Mam problem z menu: "Zapisz" i "Zapisz jako...".
Jak wprowadzę do tabeli jakieś dane to gdy nacisnę przycisk "Zapisz" powinno otworzyć się okno "Zapisz jako...", a później już tylko "Zapisz".
Przy pierwszym zapisie czyli "Zapisz jako..." wszystko jest ok, ale już przy drugim zapisie "Zapisz" przy lini :

StreamWriter f = new StreamWriter(plik); 

wyskakuje mi alert: "Pusta nazwa ścieżki jest niedozwolona".
Oto fragment kodów:

private void zapiszToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (plik != null)
            {
                StreamWriter f = new StreamWriter(plik);
                //f.WriteLine();
                //{
                    for (int r = 0; r <= dataGridView1.Rows.Count - 1; r++)
                    {
                        for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++)
                        {
                            plik = plik + dataGridView1.Rows[r].Cells[c].Value;
                            if (c != dataGridView1.Columns.Count - 1)
                            {
                                plik = plik + ";";
                            }
                        }
                        f.WriteLine(plik);
                        plik = "";
                    }
                //}
                 f.Close();
            }
            else zapiszJakoToolStripMenuItem_Click(sender, e);
        }

        private void zapiszJakoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.FileName = plik;
            dialog.Filter = "Plik csv (*.csv)|*.csv|All files (*.*)|*.*";
            dialog.FilterIndex = 1;
            dialog.DefaultExt = "csv";

            if (dialog.ShowDialog() == DialogResult.OK && dialog.FileName.Length > 0)
            {
                StreamWriter f = new StreamWriter(dialog.FileName.ToString());
                f.WriteLine();
                for (int r = 0; r <= dataGridView1.Rows.Count - 1; r++)
                {
                    for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++)
                    {
                        plik = plik + dataGridView1.Rows[r].Cells[c].Value;
                        if (c < dataGridView1.Columns.Count - 1)
                        {
                            plik = plik + ";";
                        }
                    }
                    f.WriteLine(plik);
                    plik = "";
                }
                f.Close();
            } 
0
papcio chmiel napisał(a):

wyskakuje mi alert: "Pusta nazwa ścieżki jest niedozwolona".

To musisz podać ścieżkę do pliku. Sama nazwa pliku bez ścieżki nie wystarczy.

0

Kombinuję jak koń pod górę i nic mi nie wychodzi.
Wcześniej miałem zadeklarowaną zmienną string:

private string plik = null; 

Oczywiście mogę podać ścieżkę na sztywno np:

private string plik = "e:\\zz.csv"; 

i wtedy funkcja "Zapisz" działa.
Tylko ja nie chcę ścieżki bezwzględnej, bo nazwę pliku lub lokalizacji chciałbym sobie zmienić, dlatego dałem warunek:

 else zapiszJakoToolStripMenuItem_Click(sender, e); 

Co mam jeszcze zadeklarować aby było dobrze?

0
papcio chmiel napisał(a):

Przy pierwszym zapisie czyli "Zapisz jako..." wszystko jest ok, ale już przy drugim zapisie "Zapisz" przy lini :

StreamWriter f = new StreamWriter(plik); 

wyskakuje mi alert: "Pusta nazwa ścieżki jest niedozwolona".

Sprawdź co siedzi w zmiennej plik. Jakieś nieprawidłowe dane tam są i dlatego się sypie. Zobacz co tam jest.

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