|
Bruce
|
|
Как регулировать видимость и ширину колонок в DataGrid?02.06.2010, 06:32. Показов 5189. Ответов 15
Метки нет (Все метки)
Нет справки по NET.-у, а нужно выводить не все колонки из DataTable,
а некоторые и изменить ширину колонок. Как это сделать? |
|
| 02.06.2010, 06:32 | |
|
Ответы с готовыми решениями:
15
Запись в файл по столбцам, как регулировать их ширину Как изменить ширину колонок в шаблоне? |
|
1 / 1 / 5
Регистрация: 29.11.2008
Сообщений: 179
|
|
| 02.06.2010, 20:13 | |
|
RTFM
Кратко 1. Создать объект типа DataGridTableStyle 2. Привязать DataGridTableStyle к нужному DataTable 3. Добавить в DataGridTableStyle объекты типа DataGridColumnStyle(каждый из них привязывается к столбцу DataTable'а) 4. Добавить DataGridTableStyle в коллекцию TableStyles твоего ДатаГрида 5. Дать ДатаГриду источник данных (DataGrid1.SetDatabinding...) И... все
0
|
|
|
Bruce
|
|
| 03.06.2010, 03:01 | |
|
По пунктам:
п1.Сделал. п2.Что значит 'привязать'? п3.см.пункт п2. п4.Сделал. п5.Сделал. А как сделать колонку невидимой? |
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 04.06.2010, 02:41 | |
|
С DataGrid я не специалист, извеняюсь мне он 'отвратительный' элемент.
Но попробуй следующее: Для колонки которую не хочешь отображать, а данные в ней нужны, попробуй этой колоне поставить Width = 0, по сути видно ее не будет, а как объект она будет существовать и данные в нее вольются.
0
|
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
||||||
| 04.06.2010, 02:48 | ||||||
0
|
||||||
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
||||||
| 04.06.2010, 02:59 | ||||||
|
В примере кода есть строка:
Что-то типа .Visible у колонки нет. Вот и попробуй сделать ей .Width = 0 (когда будешь эту колонку в TableStyles организовывать, или из кода) P.S. Привязать - это значит к созданному тобой TableStyles подключить данные из DataSet например.
0
|
||||||
|
Bruce
|
|
| 04.06.2010, 18:46 | |
|
Для меня проблема именно в 'подвязке','подключении' ...
Эти слова лучше перевести с русского языка на язык .NET. |
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 05.06.2010, 04:00 | |
|
myGrid.SetDataBinding(ds, 'Suppliers')
где: ds = твой заполненный DataSet 'Suppliers' = имя таблицы в твоем DataSet (потому как таблиц в DataSet тоже может быть множество, их именуют) По сути в скобках указываешь атрибуты источника данных и все - данные в Гриде. Источником данных может быть: DataTable class DataView class DataSet class DataViewManager class Прежде чем подключать (указать в скобках атрибуты) источник данных для ДатаГрида, естественно надо источник заполнить данными, а уж в Грид эти данные пойдут по первой строке. Если не укажешь TableStules данные лягут в Грид так как они организованы в источнике данных, иначе в соответствии с TableStules Вот в принципе и все, по поводу подключения данных к DataGrid. Ведь выше человек описал все, указал 'кратко' потому что подробно да еще в коде - это значит написать приложение (или почти приложение) на страницах форума... P.S. - Ну хоть какая-то справка то должна быть ведь VS.NET без справки не инсталится и тем более не стартует. В комплекте есть MSDN пусть старый, но в нем просто тьма примеров по этому вопросу.
0
|
|
|
Bruce
|
|
| 05.06.2010, 13:37 | |
|
Наверное, мне лучше сразу было признаться, что
я пишу проект под PocketPC на C#. К сожалению, таких методов, как SetDataBinding там нет... Для подвязки я использовал : dataGrid1.DataSource = DataTable1.DefaultView. Однако как подвязать TableStyle и ColumnGridStyle, так и не понятно. P.S. MSDN-а нет,даже из старого. Если из тьмы примеров есть хоть один под Pocket PC, буду благодарен. |
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 06.06.2010, 02:02 | |
|
Жаль, но в разработке под PocketPC на C# я плохой помошник.
Хотя, использование в DataGrid TableStyles, ну в общем то очевидно даже на уровне встроеных конструкторов (мастеров) в самом DataGrid. Ну не знаю. Не уже ли так сложно понять, что в DataGrid есть колекция TableStyles, по своему набору свойств любой TableStyles говорит сам за себя. Создавая TableStyles (далее будет 'стиль') мы предполагаем что каким-то образом будем задавать формат таблице для определенного набора данных. Сразу надо отметить, что этим 'стилем' будет пользоваться таблица (набор данных, который мы заранее подразумеваем организовать в источнике данных). Создавая 'стиль' мы его именуем, желательно так, чтобы потом самому было понятно что это 'имя' будет асоциировать в коде, кроме имени сам контрол индексирует каждый 'стиль', в связи с этим имеем возможность доступиться к 'стилю' по имени или по индексу. Необходимо заметить одну деталь. Когда в ДатаГриде создаешь ТаблицуСтиля, не маловажное внимание надо обратить на свойства 'стиля' - TableMaping, сюда необходимо написать (руцями написать) имя таблицы данные из которой будут использоваться в этом стиле. ВНИМАНИЕ! Имя таблицы имеется ввиду, таблица в источнике данных и имя как ты ее наименовал (например, dtPhoneNumerATC = dsBilling.Tables('sprPhoneNumerATC')), вот это имячко и надо указать в TableMaping, тогда данные лягут так как ты им подготовил ДатаГрид. Далее в каждом стиле есть колекция колонок, здесь необходимо понимать, что в данной колекции нам необходимо описать структуру таблицы для конкретного 'стиля' - ну почти так, как мы это делали в базе данных. Опять таки каждая колонка может быть именована и в любом случае будет индексирована (в смысле иметь индекс). Если 'в курсе дела' как поименованы поля в таблице которая указана в TableMaping для 'стиля' тогда надо (извени за не точность) - нет, именно НАДО указать в свойстве MapingName для каждой колонки - имя поля в таблице которая указана в TableMaping для 'стиля'. Короче говоря, если хочешь, чтобы данные легли в ТаблицуСтиля (или по таблице стиля в Грид) позаботься о том, чтобы в ТаблицеСтиля в свойстве TableMaping было имя таблицы (как она именована в источнике данных, например ДатаСет или в его ДатаТабле), а в каждой колонке этого стиля, в свойстве MapingName было имя поля из этой таблицы, тогда все должно заработать и по-моему не зависит от среды. Мутно все получается. Ну ничего не поделаешь из-за этой мути я и не терплю ДатаГрид. Кроме этого (по-моему) у ДатаГрида больше недостатков чем преимуществ. И все его преимущества, извеняюсь, муть которая не имеет ни каких практических качеств. (Детская книжечка для раскрашивания картинок)
0
|
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 06.06.2010, 02:22 | |
|
Извени, мне тяжело дать тебе конкретные примеры в еоде (даже на VB).
Я имею проект в котором пытался широко использовать ДатаГрид, но из-за его 'костноязычия' мне пришлось переделать весь проект и сейчас я использую исключительно ListView - в проекте ни одного DataGrid. Имею полное счачтье. проект работает с базой данных одновременно поднимается 12 таблиц из базы данных: -учет абонентов -учет валют -учет Зон,направлений, тарифов (термины из вотчины оператора связи = 3 таблицы) - учет банков - учет адресов абонента - учет документов абонента - и др. Все в одном окне (MainForm), стиль Виндового Эксплоурера. С ДатаГридом получил тупик. С TreeView + ListView проект развивается дальше без каких-либо ограничений.
0
|
|
|
1 / 1 / 5
Регистрация: 29.11.2008
Сообщений: 179
|
|
| 06.06.2010, 13:43 | |
|
Bruce,
'привязать' = дать свойства DataGridTableStyle.MappingName=<Имя DataTable, кторый должен будет отобаражаться текущим Стилем> и DataGridColumnStyle.MappingName=<Имя столбца в DataTable (обычно совпадает с именем поля в запросе SQL), данные из которого будут заливаться в колонку> Чтобы какое-то поле не выводилось в Грид, просто не создавай для него DataGridColumnStyle. Можно конечно назначить Width=0, но тогда юзер сможет открыть колонку мышью. Все это есть в .Net compact framework SetDataBinding действительно нет, но есть public object DataSource {get; set;} (=Property на VB) Пример..., ну хотя бы здесь http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsDataGridTableStyl eClassTopic.asp KOlegN Когда писал последний проект, сравнил скорость заполнения данными у ListView и DataGrid. Разница в десятки раз... в пользу ListView ![]() Расплата за гибкость.
0
|
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 06.06.2010, 15:43 | |
|
2 maxx_net
На счет заполнения данными списка - согласен на 100%, но согласен как о факте. Да в Грид данные идут быстрее в 10 или даже больше раз. Хотя имею по этому поводу собственные убеждения: 1. Не думаю, что будет прилично пользователю вывалить в список несколько тысяч записей для обработки (даже с очень большой скоростью). Такое количество строк обрабатывать не удобно. Если такая ситуация возникает сразу думаю о фильтрации данных. С ДатаГридом это неудобство (обработка строк) увеличивается из-за плохой управляемости жанными в Гриде (как недостаток - захват ячейкой всего управления на себя. Лечить можно, но это дополнительный код) 2. В ListView-е делаю закрузку данных в отдельном потоке. Получаю - илюзию мгновенного заполнения данными, строки которые легли в список доступны с первой секунды. При большом количестве строк, так же как и в Гриде организовываю фильтрацию - значит сокращаю количество, и естественно увеличиваю скорость заполнения данными. Таким образом сравниваю возможности Грида и ЛистВиева. С ЛистВиевом, конечно же есть неудобство, пока процесс не завершен нельзя осуществить поиск по списку - сортировка осуществляется автоматом. Но здесь имею много плюсов - нет 'всемогущей и всегохотящей' ячейки. Двойной и правый клик на строке работает в автомате, по нему правлю содержимое строки в форме редактирования. Изменение данных в ячейке считаю 'кощунством' пораждающим массу хлопот, которые влекут за собой бесконечное написания кода. 3. В ЛистВиеве можно определить как недостаток: сортировка, но это достаточно просто лечится. А научить Грид реагировать на клики по строке как это делает ЛистВиев, гораздо сложнее, опять таки ячейка будет первой помехой. 3. Мне оказалось легче и проще оптимизировать ЛистВиев под Грид чем наоборот и то только в отношении скорости загрузки данных. В моем случае устроил метод использования загрузки данных в потоке, хотя есть и другой способ (VirtualMode для ЛистВмева) загрузка данных порциями. Т.е. когда пользователь использует прокурутку - данные подкачиваются порциями, например по 1000 строк, что будет происходить почти мгновенно. 4. Еще один принцип. Я не терплю и никогда не использую свойства DataSourse и вского рода Binding в ДизайнМоде - предпочитаю управлять этими процесами самостоятельно. Ну например, если мне надо в момент заполнения еще проверять кое что - эта 'прелесть' мне не позволит ничего. 5. ЛистВиев симпатичнее визуально (хотя на вкус и цвет советников нет) для меня. Плюс в него легко вставить любой элемент управления, что позволит расширить функционал ЛистВиева до недосягаемых вершмн для Грида. 6. Потом эта нелепость по проверке соответствия введенных данных по формату - проверка осуществляется по выходу из ячейки. И что? А получается по принципу 'Не угадал. Попробуй еще раз (а вдруг угадаешь)'. Сделать проверку в процессе ввода = куча дополнительного кода. С ЛистВиевом это уже решается совсем в другом контроле и решается. Это так сказать некоторые убеждения, которые касаются возможно только меня. Возможно обсуждая плюсы и минусы Грила и ЛистВиева, здесь в большей степени может сыграть вопрос религии... Для меня образцом действий всегда есть операционная система под которую пишу приложение. Ну извините меня не видел я Гридов в Windows. Ну например возьмите Поиск в Windows, что мы видим? ЛистВиев. Как работает? Загрузка данных в потоке. Ведь нас это не раздражает? Мы кликаем на элементе (нужном, если нужного нет ждем завершения процесса) и работаем с ним. Вместе с этим мы не собираемся прямо в списке чего-то править. Вы возразите, что там работа с файлами, а у нас с базой данных. Ну и что. Для меня главное удобство в работе. Т.е. даже не совсем важно с какой скоростью я получу список, важно как потом я
0
|
|
|
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
|
|
| 06.06.2010, 16:10 | |
|
2 maxx_net
По своим убеждениям могу определить следующее: Лучший вариант использования: 1. Выборка для анализа. предварительного просмотра данных - DataGrid 2. Выборка для последующего редактирования данных - ListView
0
|
|
|
Bruce
|
|
| 06.06.2010, 23:01 | |
|
Огромное спасибо всем за помощь. Надо признать, не ожидал
такой поддержки. Колонки не выводятсяя!!!!!!! P.S. Особая благодарность maxx.net и KOlegN за терпение. |
|
|
Espanol
|
|
| 19.04.2011, 13:15 | |
|
Уважаемые!
Я небольшой спец по VB. Однако судьба столкнула с этим. Многое освоил, однако, с DataGrid уперся. Помогите. Мне нужно менять параметры колонок DataGrid'a (ширину, заголовок и пр.) в коде. Поступал так: Создал DataGrid в конструкторе, обозвал его dg_back, Создал стиль (TableStyle), обозвал его dg_ts1, В нём создал стили пяти колонок (GridColumnStyles) и обозвал их cs1, cs2, ... cs5. Привязал к DataGrid'у таблицу 'tab_tovar' из DataSet'а ds. Всё успешно получается, однако в заголовках столбцов пишутся имена полей таблицы (я о таблице из DataSet'a), а ширина столбцов одинакова. По наивности решил, что обращаясь к моему гриду так: dg_back.TableStyles.Item(0).GridColumnSt yles.Item(0).Width = 200, я тем самым изменю ширину столбца, а так: dg_back.TableStyles.Item(0).GridColumnSt yles.Item(0).HeaderText = 'Артикул' - заголовок этого столбца. Ну и т.д. Однако ничуть не бывало! Редактор кода ошибок не пишет, всё воспринимает, как должное, но никаких изменений на экране! Мой грид остаётся совершенно таким, как и без воздействия на него из кода. Я думаю, что я недопонимаю связь между стилями (таблицы, столбцов) и живым гридом. Может быть грид нужно принудительно заставить увидеть мои стили. А может и тут я неправ. Помогите. Я прилежный ученик. Буду всем очень признателен. Спасибо. |
|
| 19.04.2011, 13:15 | |
|
Помогаю со студенческими работами здесь
16
Как задать ширину таблицы и колонок Как пропорционально изменять ширину колонок DBGrid? DataGridView - как подогнать ширину таблицы под размер колонок Рассчитать ширину колонок с учетом ScrollBar в StringGrid на всю ширину StringGrid Как получить ширину и высоту заполненной данными DataGrid? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|