Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Bruce

Как регулировать видимость и ширину колонок в DataGrid?

02.06.2010, 06:32. Показов 5189. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нет справки по NET.-у, а нужно выводить не все колонки из DataTable,
а некоторые и изменить ширину колонок. Как это сделать?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2010, 06:32
Ответы с готовыми решениями:

Программно задать ширину колонок DataGridView
Всем привет! Подскажите как программно задать ширину колонок DataGridView?

Запись в файл по столбцам, как регулировать их ширину
Здравствуйте. Мне нужно записать несколько строк в файл. Шапка, такого типа (ограничения на количество символов в столбца - не более...

Как изменить ширину колонок в шаблоне?
Всем привет! Мучаю вордпресс 4 шаблон forefront . Я новичок в Вордпрессе. Подскажите пожалуйста, в каком документе можно уменьшить ширину...

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
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub ResizeDataGrid(ByVal DG As DataGrid, ByVal StyleIndex As Integer)
        Dim i As Integer
 
        For i = 0 To DG.VisibleColumnCount - 1
            ColsWidth = ColsWidth + DG.TableStyles(StyleIndex).GridColumnStyles.Item(i).Width
        Next
 
        Delta = DG.Width - ColsWidth
 
        For i = 0 To DG.VisibleColumnCount - 1
            DG.TableStyles(StyleIndex).GridColumnStyles.Item(i).Width = DG.TableStyles(StyleIndex).GridColumnStyles.Item(i).Width + Math.Round((Delta / DataGrid1.VisibleColumnCount), 0) - 2
        Next
    End Sub
0
2 / 2 / 0
Регистрация: 30.05.2010
Сообщений: 70
04.06.2010, 02:59
В примере кода есть строка:
Code
1
 DG.TableStyles(StyleIndex).GridColumnStyles.Item(i).Width
Это и есть ширина колонки в твоем TableStyles, который в свою очередь находится в твоем DataGrid-е.
Что-то типа .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 = 'Артикул' - заголовок этого столбца. Ну и т.д.
Однако ничуть не бывало!
Редактор кода ошибок не пишет, всё воспринимает, как должное, но никаких изменений на экране! Мой грид остаётся совершенно таким, как и без воздействия на него из кода. Я думаю, что я недопонимаю связь между стилями (таблицы, столбцов) и живым гридом. Может быть грид нужно принудительно заставить увидеть мои стили. А может и тут я неправ. Помогите. Я прилежный ученик. Буду всем очень признателен. Спасибо.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2011, 13:15
Помогаю со студенческими работами здесь

Как задать ширину таблицы и колонок
Добрый день. На основании запроса формируется вывод строк в таблицу для выбора пользователем нужной строки. ...

Как пропорционально изменять ширину колонок DBGrid?
Спасибо, нашел. Удалил.

DataGridView - как подогнать ширину таблицы под размер колонок
Имеется таблица с десятком колонок. Ширина колонок автоматически подгоняется по содержимому. После заполнения есть вертикальная полоса...

Рассчитать ширину колонок с учетом ScrollBar в StringGrid на всю ширину StringGrid
Здравствуйте, Требуется в StringGrid-ах автоматически рассчитать ширину колонок - что бы не было горизонтальной полосы прокрутки и не...

Как получить ширину и высоту заполненной данными DataGrid?
Добрый день. Есть WPF форма, на ней DataGrid, в который из сети загружаются некоторые данные (размер таблицы m*n). Как динамически (в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru