Есть ли способ сохранить таблицу DataGridView в вашем приложении WinForms C# без D Database et c? - PullRequest
0 голосов
/ 29 января 2020

Я (очевидно) новичок в концепции WinForms, а также SQL et c. Я пишу программу, которая работает как примитивный бюджетный помощник. У меня есть DataGridView, где я создал таблицу, поэтому я хочу, чтобы пользователь внес свои изменения и смог вернуться к ним при следующем запуске приложения. Я на самом деле не хочу использовать базы данных на этом этапе, и решил заставить мое приложение сохранять данные в файл Excel. Это сохраняет его, но я не понимаю, как открыть файл, чтобы снова заполнить DataGridView. Я попробовал этот подход Импорт Excel в Datagridview , но я получаю System.InvalidOperationException (Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальной машине - или что-то в этом роде). Я гуглил почти все решения, но безрезультатно. Я продолжаю получать исключения в функции, которая должна открывать файл Excel.

        private void ToCsV(DataGridView dGV, string filename)
        {
            string stOutput = "";
            // Export titles:
            string sHeaders = "";

            for (int j = 0; j < dGV.Columns.Count; j++)
                sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t";
            stOutput += sHeaders + "\r\n";
            // Export data.
            for (int i = 0; i < dGV.RowCount - 1; i++)
            {
                string stLine = "";
                for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
                    stLine = stLine.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t";
                stOutput += stLine + "\r\n";
            }
            Encoding utf16 = Encoding.GetEncoding(1254);
            byte[] output = utf16.GetBytes(stOutput);
            FileStream fs = new FileStream(filename, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write(output, 0, output.Length); //write the encoded file
            bw.Flush();
            bw.Close();
            fs.Close();
        }
        //button for saving
        private void savexmlToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Excel Documents (*.xls)|*.xls";
            sfd.FileName = "export.xls";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                //ToCsV(dataGridView1, @"c:\export.xls");
                ToCsV(DtgTable, sfd.FileName);
            }
        }

.... и вот функция открытия:

    private void OpenxmlToolStripMenuItem_Click_1(object sender, EventArgs e)
    {
        String name = "Items";
        String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                        "C:\\Sample.xlsx" +
                        ";Extended Properties='Excel 12.0 XML;HDR=YES;';";

        OleDbConnection con = new OleDbConnection(constr);
        OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con);
        con.Open();

        OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
        DataTable data = new DataTable();
        sda.Fill(data);
        DtgTable.DataSource = data;
    }   

Видимо, это то, что вызывает исключение появляться после того, как я пытаюсь открыть файл xls "con.Open ();"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...