Как импортировать Excel в Datagrid, а затем фильтровать по значениям БД - PullRequest
0 голосов
/ 22 апреля 2020

мой вопрос об импорте Excel в datagridview, но есть дополнительный случай.

У меня также есть база данных oledb с кодом магазина и именами магазина.

Я хочу, чтобы он отображал только коды магазина из базы данных, которые находятся в базе данных после импорта.

мои коды здесь;

 Dim conn As OleDbConnection
        Dim dtr As OleDbDataReader
        Dim dta As OleDbDataAdapter
        Dim cmd As OleDbCommand
        Dim dts As DataSet
        Dim excel As String
        Dim OpenFileDialog As New OpenFileDialog


        OpenFileDialog1.FileName = ""
        OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
        OpenFileDialog1.Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls"

        If (OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
            DataGridView1.Columns.Clear()

            Dim fi As New FileInfo(OpenFileDialog1.FileName)
            Dim FileName As String = OpenFileDialog1.FileName

            excel = fi.FullName
            conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel + ";Extended Properties=Excel 12.0;")
            dta = New OleDbDataAdapter("Select * From [Sheet1$]", conn)



            dts = New DataSet
            dta.Fill(dts, "[Sheet1$]")
            DataGridView1.DataSource = dts
            DataGridView1.DataMember = "[Sheet1$]"
            conn.Close()
        End If

во-первых, извините за мои ужасные изображения engli sh :)

следующим образом;

Основная форма

Форма списка магазинов

Я хочу, чтобы в списке данных отображались только те из списка магазинов. .: \

1 Ответ

0 голосов
/ 22 апреля 2020

Не совсем понятно, как выглядит ваша текущая презентация / презентация, в чем проблема, и как должна выглядеть ваша желаемая презентация / презентация. Но вы спросили о выборе только одной части импортируемых данных, которая предположительно находится только в одном столбце импортированных данных Excel.

Когда создается datatable, у него есть столбцы и строки из листа Excel. Столбцы будут данными из первой строки, а строки будут записями из последующих строк на листе. Вы можете легко получить доступ как к данным заголовка, так и к данным строки. Приведенный ниже код ОЧЕНЬ грубый, но вы можете увидеть, как получить доступ к данным в datatable, которые вы уже очень успешно импортировали в ограниченном коде, показанном выше.

Dim columns = datatable.Columns
Dim rows = datatable.Rows
Dim columns1 = columns(0)
Dim rows1 = rows(0)
Dim element1 = rows1(0)

В столбцах будут все заголовки, так что вы можете найти столбец с кодами магазина или именами магазина. Тогда строки будут иметь данные для каждого магазина. Итак, выше, row1 - это первая строка данных, а element1 - данные в этой строке из columns1 и т. Д. (0) - это индекс для соответствующих коллекций.

Вам, конечно, придется написать код для извлечения необходимых данных и, при необходимости, устранения дубликатов, но все эти данные уже есть.

Надеемся, что получение данных в список, а затем сортировка, фильтрация и выбор данных должны быть относительно простыми, но если нет, добавьте комментарий. Это какая-то другая проблема. Вы спрашивали о получении только кодов магазина.

Добавлено: На основании ваших дополнительных изображений и пояснений вы собираетесь выполнить операцию SQL INNER JOIN. На странице w3schools.com по SQL INNER JOIN: «Ключевое слово INNER JOIN выбирает все строки из обеих таблиц, если между столбцами есть совпадение». Это то, что вам придется изучать и изучать, но оно должно обеспечить то, что вам нужно в этом случае. Вам нужно будет определить и построить обе таблицы, а затем выполнить JOIN.

И, кстати, вы также можете перейти по ссылке, указанной в первом комментарии TS, и если это решит вашу проблему, это гораздо более простое решение.

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