Импорт электронной таблицы Excel в DataGridView и завершение поиска - PullRequest
1 голос
/ 14 марта 2020

Я конвертирую старое приложение VBA в VB. NET. Это приложение содержит несколько инструментов, и мне нужна некоторая помощь для преобразования одного из них.

По сути, есть электронная таблица Excel, полная информации о клиенте, такой как название компании, номер модели, серийный номер, дата окончания гарантии , дата окончания плана, город / страна, альтернативное название компании и комментарии.

Инструмент имеет элемент управления представлением списка со всеми соответствующими столбцами, так же, как в электронной таблице Excel, и имеется текстовое поле, в котором пользователь Можно ввести некоторые критерии поиска, такие как серийный номер или название компании. Любые результаты сопоставления из электронной таблицы Excel помещаются в представление списка с данными из столбцов электронной таблицы, отсортированными в столбец правильного соответствия для элемента управления представлением списка.

Текущий инструмент VBA легко может импортировать эти данные в форму, поскольку она (форма) имеет легкий доступ к данным электронной таблицы - однако; в моем случае, когда моя программа является внешней по отношению к Excel и VBA - я не могу сделать это без предварительного импорта данных.

Поэтому мой вопрос:

  1. Как импортировать электронную таблицу Excel в мою форму VB. NET для использования данных (этот файл всегда находится в одной и той же папке на каждом компьютере, поэтому нет необходимости в диалоге просмотра файлов, достаточно просто сохранить каталог электронной таблицы Excel). отлично).

  2. Как мне это сделать / какой будет какой-то подходящий код, который позволит пользователю ввести критерии поиска и заполнить представление списка соответствующими результатами

  3. Когда пользователь завершает поиск и представление списка заполняется соответствующими данными из электронной таблицы Excel, как сортировать данные по полям (сортировка данных в столбцах в Excel в столбцы в VB) . NET представление списка, поэтому при сопоставлении результата в столбце «Компания» из Excel go в столбец представления списка с именем «Компания»).

Я приложил exa Таблица Excel, содержащая данные.

https://drive.google.com/file/d/1SiFZQiz8gsHfKgGIJZmLfrbmfhQkot7B/view?usp=sharing] 1

Вот как выглядит список:

enter image description here

1 Ответ

1 голос
/ 15 марта 2020

Мы действительно не отвечаем на такие большие вопросы о SO; здесь есть целое приложение, и вы просите совета о том, как все это кодировать от начала до конца sh, что включает в себя хороший кусок проектной работы (в отличие от реализации) - субъективная или основанная на мнении вещь сама по себе. Я отвечу так, чтобы дать некоторые указания для направления, в котором вы можете двигаться, но вы должны стремиться держать будущие вопросы достаточно узко сфокусированными.

Как импортировать электронную таблицу Excel в мой VB. NET форма для использования данных (этот файл всегда находится в одном и том же каталоге на каждом компьютере, поэтому нет необходимости в диалоге просмотра файлов, достаточно просто сохранить каталог электронной таблицы Excel).

Используйте OpenFileDialog, чтобы пользователь выбрал файл или жесткий код, некоторые логи c, чтобы найти его в фиксированном месте. Посмотрите на connectionstrings.com строку подключения, необходимую для подключения драйвера базы данных Access / JET к файлу (он может читать файлы Excel и обращаться с ними как с БД). У Карла Протмана есть пригодный для использования блок кода здесь - это C#, но вы можете либо преобразовать его в VB с помощью онлайн-конвертера, либо просто прочитать и понять общий поток "make new DataTable, make new DataAdapter" установите строку подключения и строку SQL DataAdapter на что-нибудь разумное, вызовите DataAdapter.fill "и напишите VB

Считайте файл, используя запрос SQL (SELECT * FROM sheetname), и используйте DataAdapter для заполните DataTable содержимым файла

Как мне это сделать / какой будет соответствующий код, позволяющий пользователю вводить критерии поиска, и заполнять представление списка соответствующими результатами

Предоставьте текстовое поле в форме для ввода пользователем. Нажмите кнопку или клавишу возврата, чтобы начать поиск. Чтобы выполнить поиск, просто установите свойство .Filter объекта DataView, возвращаемого свойством DataTable по умолчанию. Вы можете найти больше информации о том, какой синтаксис требуется для свойства Filter в документации по свойству .Expression столбца данных - звучит как странное место для его хранения, но это будет иметь смысл позже!

Когда пользователь завершает поиск, а представление списка заполняется соответствующими данными из электронной таблицы Excel, как сортировать данные по полям (сортировать данные в столбцах в Excel в столбцы в VB). NET представление списка, поэтому сопоставление результата в столбце «Компания» из Excel будет go в столбце представления списка «Компания»).

«Сортировка данных по полям» на самом деле не делает смысл в контексте того, что я собираюсь вам сказать, и сортировка по фразе обычно относится к изменению порядка строк данных, а не к присвоению данных столбцам (что, я думаю, вы имеете в виду)

Чтобы ваши данные в DataTable отображались в DataGridView, единственное, что вам нужно сделать, это установить для свойства .DataSource DGV значение t Экземпляр DataTable. DGV будет фактически привязываться к DefaultView, поэтому все фильтры вступят в силу. DGV автоматически отобразит содержимое таблицы, как только будет установлена ​​привязка данных с этой единственной строкой кода

В целом, я ожидаю, что это приложение сможет выполнить sh примерно в 10 строках кода:

'make new DataTable, possibly as a class level variable for ease 

'event handler for read_file button click
'make new DataAdapter, with connection string pointing to the excel file and SQL string to select the data
'fill DataTable
'assign data source of DataGridView, to filled DataTable


'event handler for filter button click
'set .filter property of class level DataTable.DefaultView property
...