Работаем с MS Word из C#, часть 0, класс и тестовый проект-пример WinForms

Иллюстрация к циклу заметок про работу с Microsoft Word из C#. Проект Visual Studio 2010, два класса - WordDocument и WordSelection (просто часть документа, обертка над Range), реализующие описанные приемы, тестовый шаблон и простенькое окошко, позволяющее протестировать работу классов и … Читать далее

LinQ запрос к DataTable

Задача: выполнить запрос на LinQ к DataTable. Стандартная DataTable LinQ не поддерживает, но решается это затруднение очень просто, надо использовать метод AsEnumerable() из LinQ to Dataset. Таблица должна быть строго типизирована, иначе получим ошибку Specified cast is not valid. Минимальный … Читать далее

Выбираем/получаем выбранную строку/ячейку в DataGridView

Задача: получить выбранную в данный момент строку/ячейку DataGridView и/или выбрать ее. На самом деле это одна и та же задача, если количество строк и столбцов в гриде может непредсказуемо меняться. Мы конечно можем получить выбранный столбец через свойство SelectedRows, но … Читать далее

Ошибка Collection was modified; enumeration operation might not execute

Иногда программисту хочется чего-то удалить из коллекции. Например строку из коллекции строк DataTable. Он радостно пишет что-то в духе: и получает жестокий облом в виде ошибки с невнятным сообщением "Collection was modified; enumeration operation might not execute". … Читать далее

Совершенный код. Главная задача программирования

Этой записью я надеюсь начать цикл конспектов замечательной книги Стива Макконела "Совершенный код" - обязательного чтения для любого программиста. При всей своей замечательности книга очень большая и сложная, даже при повторном прочтении очень сложно удержать ее в голове всю. Начну … Читать далее

А ваш язык программирования это может? (перевод)

Как-то раз, просматривая свой код, вы заметили, что два больших участка выглядят практически одинаково. Они действительно были одинаковы, за исключением того, что один участок относился к "спагетти" а второй к "шоколад". Эти примеры написаны на JavaScript, но даже если вы … Читать далее

Отслеживаем изменения в таблице с помощью триггеров Transact Sql

Задача: сохранять информацию о всех изменения в определенной таблицы. Наиболее простое решение - создать таблицу, совпадающую по структуре с отслеживаемой и при каждом изменении писать в эту таблицу строку с обновленным состоянием измененной строки. Сделать это можно с помощью триггера, … Читать далее

Прекрасный код

В подавляющем большинстве случаев то, что неопытным разработчикам кажется прекрасным, поверхностно, а то, что они считают уродливым - это на самом деле закаленный в боях, готовый к внедрению код от мастеров. Learn to Read the Source, Luke on Coding Horror … Читать далее

ComboBox - подстраиваем ширину выпадающего списка под самый длинный элемент

Два очевидных решения - сделать всплывающую подсказку или увеличить ширину самого выпадающего списка. Вычисляем максимальную длину строки в таблице-справочнике: Setting DropDown list width of DataGridView ComboBoxColumn - WinForms … Читать далее

Работа с Excel из C# через COM Interop, часть 1, открываем документ и выводим данные

Задача: вывести данные в таблицу Excel с красивым оформлением и открыть ее, чтобы пользователь мог напечатать или сохранить средствами самого Excel. Необходимо поддерживать все версии Office, начиная с 97, то есть вывод в новые xml-форматы Office 2007 и выше невозможен … Читать далее