metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-12-15 07:38 pm

Ад дотнета.

Понял, что если не напишу что-нибудь на мейнстримных языках, то убреду в тяжкие дебри Template Haskell и прочей жути, и решил занятся очередным этапом очередной "срочно-нах-нужно-вчера-конкуренты-сука-жопа-сатана-поджимают" задачей.

Нужно сделать для DataGridView ячейку, которая позволяла бы вводить папку, в общем случае - содержащую едит-бокс, кнопку и обработчик для этой кнопки. 10 минут поиска в гугле, нашел вариант решения, итд, итп, сижу подгоняю под себя.

Все таки архитектура DataGridView и вообще чего-либо хоть как-то сложного в Windows.Forms это такой адский ад, что выглядит это следующим образом: всех вменяемых программистов в микрософте, занимающихся дотнетом, кинули на реализацию базовых вещей - виртуальной машины, компилятора, итд, итп, а Windows.Forms отдали на реализацию каким-то индусским равшаноджамшутам, которые еще вчера, блин, в ганге купались и коровьей мочой мозги себе смазывали.

Вот, спрашивается, как тут удержаться от дебрей хаскеля, если альтернатива - копаться в индусском кале или писать вручную на дельфи маппинги база данных->объекты->(гуи|модуль расчета опердени) -> объекты -> база данных.

[identity profile] madeveloper.livejournal.com 2009-12-15 08:49 pm (UTC)(link)
А какие сложности с ячейкой? Абсолютно любой контрол + IDataGridViewEditingControl.

[identity profile] metaclass.livejournal.com 2009-12-15 08:54 pm (UTC)(link)
Вот IDataGridViewEditingControl как раз и выглядит, как будто его проектировали на берегах ганга. Вернее, вообще весь DataGridView так выглядит.

[identity profile] madeveloper.livejournal.com 2009-12-15 08:57 pm (UTC)(link)
И что в нем не так? Огрехи есть, но чисто идеалистические, в работе не замечаемые.

[identity profile] metaclass.livejournal.com 2009-12-15 09:11 pm (UTC)(link)
Вот для начала - как получить ячейку, которую редактирует контрол?

[identity profile] madeveloper.livejournal.com 2009-12-15 09:25 pm (UTC)(link)
Что-то типа EditingControlDataGridView.CurrentCell
Только непонятно зачем. Если нужно контрол как-то инициализировать под конкретную ячейку, так на то InitializeEditingControl у CellTemplate есть...

[identity profile] metaclass.livejournal.com 2009-12-15 09:38 pm (UTC)(link)
Ну вот я делаю ячейку с кнопкой, но обобщенную - мне нужно по щелчку на кнопку вызвать событие, которое я назначаю при генерации ячеек. Для этого нужно достучаться до ячейки, где событие объявлено.

А вызов через CurrentCell - это место для потенциальных багов, т.е. мы должны быть уверены, что эта проперть равна именно той ячейке, которая создала контрол. То, что это так - ничем не гарантируется.
Вот если бы контрол получал ячейку и datagridview при инициализации - было бы нагляднее.

[identity profile] madeveloper.livejournal.com 2009-12-15 09:51 pm (UTC)(link)
Если мы говорим о каком-то универсальном контроле, то в его обязательства не должен попадать анализ того, кто и зачем его вызвал. Для этого и придуман InitializeEditingControl, где можно затарить контрол всей необходимой амуницией заведомо _до_ его появления в тылу UI. Хоть CurrentCell и не лучший вариант решения задачи, но я не вижу причин, почему он может указывать на какую-то другую ячейку...

[identity profile] madeveloper.livejournal.com 2009-12-15 10:03 pm (UTC)(link)
Да, еще момент, кнопка нужна в момент редактирования или всегда и у всех ячеек? Второй случай лечиться по другому, можно рядом с DataGridViewTextBoxCell банально положить DataGridViewButtonCell...

[identity profile] metaclass.livejournal.com 2009-12-15 10:17 pm (UTC)(link)
Только в момент редактирования.

[identity profile] madeveloper.livejournal.com 2009-12-15 10:19 pm (UTC)(link)
Тогда предыдущий пост в силе ;)