@tmtm666

Как извлечь данные из Excel в datagridview по двум условиям?

ИМЕЕТСЯ
База данных в Ексель
База данных строки - 10 000 шт;
столбцы - 10 шт;

ВОПРОС
1. Каким способом оптимально извлечь из Ексель данные по двум условиям в три разные datagridview ?
2. Извлекаются следующие столбцы таблицы:
- ID
- наименование
- кол 
3. Таблица извлекается с заголовками столбцов (по возможности);

КОД
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=NO\";", textBox1.Text));

            connection.Open();
            OleDbCommand command = new OleDbCommand("SELECT * FROM [Лист1$]", connection);
            OleDbDataReader reader = command.ExecuteReader();
            dataGridView1.Columns.Add("1", "1");
            dataGridView2.Columns.Add("1", "1");
            dataGridView3.Columns.Add("1", "1");
            while (reader.Read())
            {
                if (reader[0].ToString() == textBox2.Text)
                {
                    if (Convert.ToInt32(reader[1]) > 10 && Convert.ToInt32(reader[1]) < 14) dataGridView1.Rows.Add(reader[1].ToString());
                    if (Convert.ToInt32(reader[1]) > 20 && Convert.ToInt32(reader[1]) < 24) dataGridView2.Rows.Add(reader[1].ToString());
                    if (Convert.ToInt32(reader[1]) > 30 && Convert.ToInt32(reader[1]) < 34) dataGridView3.Rows.Add(reader[1].ToString());
                }
            }
            connection.Dispose();
        }

        private void textBox1_DoubleClick(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
        }
    }
}


СЦЕНАРИЙ
1. Вносим ID задания.
2. Вносим путь к файлу.
3. Нажимаем кнопку "ИЗВЛЕЧЬ".
4. Данные извлекаются в зависимости от "ID" и "порядковый номер" в соответствующую datagridview.

ПРИЛОЖЕНИЕ
1. Проект.
http://файлообменник.рф/w52ue994qlc1.html

2. Скрин
9a04db75f16e4618915a147249f2b6ea.jpg
  • Вопрос задан
  • 834 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dmitryKovalskiy
программист средней руки
Сделайте по человечески, а не на уровне студента, изучающего платформу второй день. Пишем DAL в котором есть класс для извлечения данных из Excel файла. Пишем класс модели с необходимыми полями. На уровне DAL формируем коллекцию объектов модели. На уровне представления(ваше приложение) отображаем части данной коллекции в нужном вам DataGrid. Не надо без посредников в code-behind писать извлечение данных с мгновенной вставкой. Так никто не делает. А если покажете такое на собеседовании - его результат я вам прямо здесь скажу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы