Robert S4r Ответов: 1

Как импортировать определенные значения ячеек excel в ячейку datagridview на языке C#


Всем привет! Я немного обеспокоен тем, как обновить существующий datagridview данными из mysql с определенными значениями ячеек excel (не листов excel), импортированными из excel.
Доступные решения позволяют импортировать весь лист целиком и заменить существующий datagridview.

Спасибо.

Что я уже пробовал:

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "Excel File|*.xlx;*.xlsx;*.xlsm;";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    textBox1.Text = dlg.FileName;

                    string name = "sheet1";
                    string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + textBox1.Text + "; Extended Properties='Excel 12.0 XML;HDR=YES;';";
                    OleDbConnection Con = new OleDbConnection(constr);
                    OleDbCommand OleCon = new OleDbCommand("SELECT * FROM [" + name + "$]", Con);
                    Con.Open();
                    OleDbDataAdapter sda = new OleDbDataAdapter(OleCon);
                    DataTable data = new DataTable();

                    sda.Fill(data);
                  
dataGridView1.DataSource = data;

                    for (int i = 0; i < dataGridView1.RowCount - 1; i++)
                    {
                        dataGridView1.Rows[i].Cells["Ab"].Value = sda;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

1 Ответов

Рейтинг:
0

Maciej Los

Я бы получил данные MySql в datatable1, а затем я бы получил данные Excel в datatable2. Затем я присоединялся к ним на ключевом поле и, наконец, отображался в компоненте datagridview.

public static DataTable ReadMySqlData(string myConnString, string mySelectQuery)
{
    DataTable dt = new DataTable();
    using(MySqlConnection myConnection = new MySqlConnection(myConnString))
        using (MySqlCommand myCommand = new MySqlCommand(mySelectQuery,myConnection))
        {
            myConnection.Open();
            using(MySqlDataReader myReader= myCommand.ExecuteReader())
                dt.Load(myReader);
            myConnection.Close();
        }
    return dt;
}


Используйте тот же способ для извлечения данных Excel. Примечание: замените объекты MySql объектами OlDb.

Чтобы получить общие данные, вы можете использовать Linq:
DataTable MySqlDt = ReadMySqlData(..., ...);
DataTable ExcelDt = ReadExcelData(..., ...);

var commonData = (from md in MySqlDt.AsEnumerable()
    join ed in ExcelDt.AsEnumerable() on md.Field<int>("ID") equals ed.Field<int>("EmployeeID")
    select new
    {
        ID = md.Field<int>("ID"),
        Name = md.Field<string>("Name"),
        SurName = md.Field<string>("SurName"),
        Phone = ed.Field<string>("Phone")
    }).ToList();
)
DataGridView1.DataSource = commonData;


Удачи вам!