Позвольте мне предоставить небольшую деталь, чтобы объяснить, что я пытаюсь сделать, прежде чем я начну разбираться в сути вопроса.
У меня есть два источника данных - один представляет собой SQL Server, содержащий номера деталей, описания и т. Д. Другой - это система САПР, которая в традиционном смысле не имеет базы данных. То, что я пытаюсь сделать, это прочитать спецификацию с SQL Server и сравнить ее с чертежом сборки CAD, чтобы убедиться, что система CAD содержит ту же информацию, что и SQL Server.
Получение данных с SQL Server довольно просто. Я запрашиваю базу данных и заполняю сетку данных. Готово. Быстрый. Легко.
Получение данных из системы САПР немного сложнее. Мне нужно загрузить сборочный чертеж, чтобы получить список всех составных частей, а затем загрузить эти отдельные чертежи, чтобы получить свойство «Номер детали» из чертежа. Это несколько трудоемкий и медленный процесс (к сожалению), так как каждый из файлов должен быть доступен. Я загружаю эти свойства в массив (я думаю, что список может быть более эффективным).
Итак, теперь у меня есть сетка данных и массив с номерами деталей. Мне нужно сравнить их и соответственно раскрасить сетку. Сетка должна оставаться прозрачной, если деталь существует в обоих, покрасить строку в желтый, если она существует только в сетке, и добавить строку, окрашенную в красный, если только в массиве.
Насколько я могу судить, это означает циклический перебор массива в каждой строке сетки. Мыслительный процесс таков:
- По умолчанию для сетки заданы желтые строки.
- Цикл по сетке и цикл по массиву для сравнения. Если совпадение найдено, сделайте строку прозрачной и удалите элемент из массива.
- После выполнения шага 2 массив должен содержать только элементы, которые не найдены в сетке. Измените размер массива, чтобы удалить пустые элементы.
- Добавьте элементы массива в сетку и раскрасьте эти новые строки красным.
Проблемы с этой логикой в том, что она кажется дорогой с точки зрения производительности. Конечно, есть лучший метод? Кроме того, если я изменю сетку каким-либо образом (например, курортом), мне придется пройти через процесс снова. Буду очень признателен за некоторые советы по этому поводу.
Спасибо!
Примечание: написано в Visual Studio 2005.