C# — C#, как правильней работать с DataGridView


Содержание

C# — C#, как правильней работать с DataGridView

DataGridView — стандартный GUI компонент для отображения и редактирования таблиц. Здесь коротко рассмотрены основные моменты работы с этим классом.

1. Перекиньте стандартным способом в форму компонент DataGridView.

Источник данных при создании можно не указывать, так как DataGridView позволяет хранить данные внутри себя и добавлять/удалять их на лету, во время выполнения (runtime). После этого редактором свойств настройте поведение по умолчанию нового экземпляра DataGridView. Я обычно меняю свойства AllowUserToAddRows на false, AllowUserToDeleteRows на false, ReadOnly на true. Можно также переименовать экземпляр из dataGridView1 в что-нибудь более осмысленное, подходящее для Вашей программы.

2. Столбцы и строки можно добавлять во время выполнения программы (см. [1]). Однако если назначение и структура таблицы (количество и наименование столбцов) известны заранее, то можно редактором свойств добавить столбцы. Для этого редактируют свойство Columns.

3. Обращение к ячейкам DataGridView довольно простое. Индексация столбцов (Columns) и строк (Rows) идет относительно нуля. Столбец с индексом 0 самый левый, и строка с индексом 0 самая верхняя. Количество строк можно получить через свойство RowCount. Добавляются строки методом Удаляются строки методом Rows->Add(), удаляются методом Rows->RemoveAt(номер строки). Пример добавления и удаления строк:

//добавим в dataGridView1 4 строки
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();
dataGridView1->Rows->Add();

//удалим все строки из dataGridView1
while (0 != dataGridView1->RowCount)
dataGridView1->Rows->RemoveAt(0);

4. Узнать номер текущей строки можно через HitTestInfo->RowIndex:

Установить (поменять) текущую строку можно через свойство CurrentCell (в примере устанавливаем третью текущую строку):

int > dataGridView1->CurrentCell = dataGridView1->Rows[idx]->Cells[0];

Текущая строка помечена в таблице треугольничком:

5. Менять данные в ячейках таблицы можно только тогда, когда существуют соответствующий столбец и соответствующая строка, иначе произойдет ошибка выполнения («System.ArgumentOutOfRangeException» произошло в mscorlib.dll Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, a его размер не должен превышать размер коллекции.). После добавления строки методом Add все значения в ячейках добавленной строки будут пустые. К ячейке таблицы можно обращаться по номеру столбца и номеру строки через свойство Value. Пример добавления и заполнения таблицы:

int i = 0; //нумерация строк начинается с 0

if ( (dataGridView1->RowCount — 1) Rows->Add();

//№ строки добавляем в первый столбец Cells[0]
dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString();
//текст добавим во второй столбец Cells[1]
dataGridView1->Rows[i]->Cells[1]->Value = «пример текста» ;


i++; //переходим к следующей строке
dataGridView1->Rows[i]->Cells[0]->Value = (i+1).ToString();
.

6. Пример изменения цвета нужной ячейки на C#:

7. Обработка клика на заголовке строки на C#:

8. Как удалить последнюю пустую строку?

Ответ: после манипуляции со строками и добавления новых строк установите в false свойство AllowUserToAddRows :

Записки разработчика

Посвящаю разработке ПО и всего с ним связанного

Работаем с DataGr >Июнь 9th, 2011 § 13 comments

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

Начнем, первое о чем хотелось бы сказать, это есть два пути (пока я знаю только два) заполнения данными данного контрола, это можно сделать в самом дизайнере или программно, т.е. вставить нужно число колонок и провести разные манипуляции с ними, настройка вида, режим только чтения, заголовки колонок и тд.

Уже пошло слишком много лирике, это же не полноценная статья, а не более чем заметка. Ближе к коду так сказать.

Два пути как создать столбец в DataGridView, первый и самый простой

Первый параметр у Add это название столбца и текст который будет отображаться в заголовке столбца.

Цукерберг рекомендует:  Одностраничный типографическое портфолио на JQuery

Тут мы сначала создаем экземпляр DataGridViewColumn, это собственно и будет наш столбец, потом нам нужно создать экземпляр DataGridViewCell и указать какой тип ячейки. Дальше указывает название счтолбцы, надпись в заголовке и шаблон ячеек. Обязательным здесь является только указания шаблона ячеек, т.к. без него при попытки добавть колноку вы получите Exception.

Второй способ более “геморный”, но обладает своими плюсами вроде, того что можно задавать тип сортировки столбца, его доступность и массой полезных настроек о которых я на пишу в последствии.


После того как мы создали нужное количество столбцов их нужно заполнить строками, как это можно сделать тут условно говоря тоже два пути (или даже четыре). Расскажу о мало полезных двух (опять же как сказать). Если нам нужно добавить пустую строку мы можем вызвать метода Grid.Rows.Add() если нужно добавить диапазон строк то можно сделать так Grid.Rows.Add(10), за место 10-ти подставьте нужно натуральное число. Полезно бывает если данных много с начало создать нужное количество строк, а потом в них писать, будет значительно быстрее чем писать в них во время добавления.

Теперь давайте добавим уже не пустые строки а строки с данными. Опять же перед нами два пути.

Первый из них мы добавляем массив объектов, к примеру строк. Выглядеть будет так

Опять таки видим что второй способ более замороченный но дает больше возможностей. Сначала мы создаем экземпляр строки, потом задаем заголовок, для этой строки (будет отображаться как самая левая колонка, можно там сделать нумерацию на пример). методу CreateCell передаем наш DataGridView что бы он очистил содержимое ячеек и можно было установить свои значения, замечу можно не использовать отделать метод SetValues а сразу же в методе CreateCells установить значения ячеек, передавт эти значения вторым параметром, в моем случае это выглядело бы так row.CreateCells(Grid,new object[] < “djaga-djaga”, “djuno-djuno” >);

Какой из этих способов подходит вашей задаче, решать тоже Вам)))

Ну и финальный этап это прочитать, данные из DataGridView. В этом примере мы читаем данные в строку data второго столбца каждой ячейки, Заметьте что Grid.Row.Count-1 потому что как только заполняет хотя бы одно поле последней строки, создается еще одно, не забывайте проверять, значения на null, иначе получите Exception в случае если ячейка не будет инициализированна.

Еще один способ получения данных из DataGridView с помощью DataGridViewRow

Ну вот пока и все, далее про таких фишки как Binding, сортировка, работа с контекстным меню, и прочие вкусности без угрозы кариеса я постараюсь рассказать в следующих заметках.

[c#] DataGr >C/C++/C# — общие вопросы

private void кнопка_Click(object sender, EventArgs e)
<
// Проверяю существует ли такой TabPage. Иначе сл. код

TabPage myTabPage = new TabPage(«Список»);
myTabPage.Name = «Список»;
tabControl2.TabPages.Add(myTabPage);
tabControl2.SelectedTab = myTabPage;

// Заполняю DGV
dataGridView1.ClearSelection();
>

private DataGridView SetupDataGridView(TabPage ob, string name)
<
DataGr > ob.Controls.Add(DGV);

// Тут настраиваю внешний вид. затем

DGV.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(DGV_CellDoubleClick); // Добавляю событие


Как в «DGV_CellDoubleClick» мне получить текущий DataGridView?

9 ответов

Отмечу ещё: если контролы динамически не только создаются, но и удаляются, то нужно обязательно отписываться от событий, на которые подписались. Иначе возможны утечки памяти. Т. е. перед удалением контрола нужно:

C# — C#, как правильней работать с DataGridView

Ранее мы рассмотрели, как удобно загружать данные в приложении Windows Forms в элемент DataGridView через DataSet. Теперь определим полнофункциональную форму, через которую мы сможем производить все стандартные CRUD операции в базе данных.

Итак, определим форму, на которой будет элемент DataGridView и три кнопки для добавления, удаления и сохранения изменений. Форма в итоге будет выглядеть примерно следующим образом:

Код формы будет выглядеть следующим образом:

Здесь для добавления объекта мы будем обращаться к хранимой процедуре sp_CreateUser, которая была добавлена в базу данных в прошлой теме.

В конструкторе данные загружаются в DataSet, первая таблица которого устанавливается в качестве источника данных для dataGridView1:

Также в конструкторе устанавливается полное выделение строки и запрет на ручное добавление новых строк:

В обработчике кнопки добавления создается новая строка, которая добавляется в таблицу объекта DataSet. И так как мы ранее установили привязку к источнику данных, то автоматически новая строка также будет добавляться и в dataGridView1:

В обработчике кнопки удаления удаляются выделенные строки в dataGridView1. Опять же в силу привязки к источнику данных будет также происходить удаление и из таблицы в DataSet:

Для обновления на не нужна никакая кнопка, так как мы можем нажать на любую ячейку таблицы (кроме заблокированного для изменения столбца Id) и изменить в ней данные. Однако сами по себе добавление новой строки, удаление строк, изменение ячеек ни как автоматически не отразятся на базе данных. И чтобы бд синхронизировалась, пользователю надо будет нажать на кнопку сохранения, обработчик которой выглядит следующим образом:

Как в прошлой теме здесь устанавливается у адаптера команда на добавление InsertCommand и затем вызывается метод Update() . В итоге мы можем добавить несколько строк, удалить, изменить, и потом один раз мы нажмем на кнопку, и все изменения будут применены к базе данных.

Цукерберг рекомендует:  Никогда не останавливайтесь и ни о чем не жалейте

LiveInternetLiveInternet

Поиск по дневнику


Подписка по e-mail

Статистика

C#: Заполнение DataGridView из Таблицы Sqlite

Четверг, 25 Августа 2011 г. 22:11 + в цитатник

В продолжении статьи о работе SQLite в С#, хочу написать о том как достать данные из таблицы и заполнить этими данными DataGridView.

Допустим у нас есть уже готовый файл с БД sample.db и в этой базе у нас есть таблица customer.

Нарисуем форму такого вида:

На ней есть всего 2 элемента: dataGridView1 и button1.

Теперь создадим процедуру для кнопки.

Код вообщем-то я откомментировал& Так что от разбора я воздержусь.

TROCKII БЛОГ

суббота, 7 июля 2012 г.

[Видеоурок] C# Работа с DataGr >

В данном видео будет показано как работать с элементом управления DataGridView, как добавлять данные и удалять их из таблицы. Также рассматривается алгоритм сохранения таблицы данных datagridview в текстовый файл. Параллельно с этим вы увидите пример работы с диалоговыми окнами, элемента управления МЕНЮ и тд.

Сразу дам ссылку на исходник той программы, которая показана на видео:
Work_Data.rar 50.1 KB


2 коммент.:

Качество скверное, очень. И зачем это дурацкое желтое пятно вокруг курсора? Только мешает.

Используем DataGrid в WPF

Не так давно мне потребовалось использовать таблицу в приложении на C#. По наивности я подумал, что буду использовать всё самое свежее и выбрал для проекта WPF вместо WinForm и, конечно, взял самый свежий .net framework 4.5. Тут-то и начались проблемы. Как всегда, я решил, что в Яндексе найдётся всё, но не тут то было — в интернете (вернее в РУнете) вообще ничего о DataGrid нет. Постоянно, как бы хитро не изменял запросы, я попадал на DataGridView из WinForm. Самое интересное в том, что платформа WPF полностью переработана и многое из того, что работало в WinForm в WPF не работает вообще никак.

Интересно также и то, что WPF должен быть как бы легче в использовании, ведь в Microsoft отделили дизайнеров от программистов, добавили векторную систему визуализации, язык XAML и прочее.

После продолжительного негодования я открыл большую и толстую книгу по WPF. И вот, чудо! Там было всё, как изменить размер, переименовать и перекрасить что угодно и как угодно, но о том, как элементарно достать запись из DataGrid не было и слова.

Отчаявшись, я решил было перейти на WinForm, но вспомнив старую добрую пословицу «если программа не работает, то проблема не в коде, а в программисте», решил разобраться в проблеме и (правда не помню на каком сайте) нашёл решение (это был сайт на английском языке в самых чёрных глубинах интернета). Название сайта вспомнил, ссылка в конце документа.

Привожу пример, как положить и достать информацию из DataGrid в WPF:

Для начала создадим новое приложение и в главном окне разместим элемент DataGrid, назовём его grid.
Далее создадим класс, который будет хранить информацию для таблицы:

После этого заполним таблицу с помощью события Loaded:

После всего получим информацию о строчке по событию MouseUp (клик мышкой):

Заключение

Обратите внимание, что обращаться к элементам таблицы в WPF действительно легче, чем в WinForm (напомню, что в WinForm нужно обязательно указывать номер столбца и ячейки), более того, таблица сохраняет исходный тип данных и это очень удобно при их обработке.

Скриншот того, что получилось:

Для примера использован Visual Studio 2012 и .net 4.0.


Записная книжка программиста-новичка, C#, SQL, PHP и все-все-все

Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?

Рубрики

Свежие записи

Свежие комментарии

  • Calator prin Romania к записи Как переименовать проект/каталог проекта в Visual Studio?
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • sdfdsgeg к записи Работа с файлом конфигурации (configuration) в C# — читаем и сохраняем
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • Надежда к записи Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании

Архивы

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

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


С выбором конкретной ячейки еще хуже, по-настоящему надежно будет работать только следующий код

Упростить себе жизнь можно парой простых методов

Комментарии

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

Напишите как выбрать несколько строк используя Ctrl и передать их номера программе

Отобразить DataSource из DataGridView в ReportViewer

Следуя более раннему вопросу о динамических столбцах в средстве просмотра отчетов, я подумал, что, по крайней мере, попытаюсь заставить все работать.
Отображаемый вывод представляет собой столбцы математических факторов, каждый из которых имеет свое собственное уникальное имя. Эти факторы (любое число от 1 до 10 могут быть выбраны) отображаются без проблем в моем элементе управления DataGridView — я генерирую DataTable, добавляя по мере необходимости строки/столбцы, а затем устанавливаю datatable в качестве источника данных для DataGridView.
Я добавил ReportViewer в свою WinForm и сгенерировал RDLC файл. Вместо того, чтобы часами пытаться выяснить, как сделать его динамичным, мой RDLC настроен на 10 столбцов (как я знаю, их никогда не будет больше), а DataSet назначается моему элементу управления ReportViewer. Затем я использую следующий код для назначения данных средству просмотра:

Цукерберг рекомендует:  Вакансии Intelsib

Так выглядит DataGridview:
И вот, это Reportviewer — обратите внимание, что две строки «Rate» и «Mult» отображаются внизу
Поэтому, пока он работает, я не вижу значения в сетке. Кроме того, если возраст превышает 100, возраст сортируется некорректно — можно ли сортировку отключить? И, исходя из предположения, я могу заставить это работать, возможно ли итерация через ReportViewer и изменение заголовков столбцов? Быстрый google говорит мне не во время выполнения?

Вы должны установить имя столбцов в вашем DataTable которое вы динамически замените как DataSource DataGridView правильно. Они должны быть Age , Factor1 , Factor2 . Factor10 .

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

Как я могу иметь одинаковые имена столбцов?

Но вы можете исправить проблему, просто создав временный DataTable содержащий Age, Factor1. Factor10, заполненный исходной таблицей данных. Передайте эту таблицу в отчет, и она будет работать.

Как я могу иметь одинаковые заголовки столбцов, которые отображаются в DataGridView?

Решение — это названия столбцов в качестве параметров. Создайте 10 параметров в конструкторе отчетов и задайте заголовок столбцов tablix в отчете, используя параметры, но не меняйте имя столбцов. Это должны быть Age , Factor1 . Затем, когда вы хотите показать отчет, дополнительно к таблице temp, о которой я говорил выше, передайте заголовки столбцов с использованием параметров.

Другая идея

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

Возможно, это не лучшее/быстрое решение, но оно работает и с некоторыми дополнительными изменениями в выражениях видимости, я могу показать только количество выбранных столбцов.
Я добавил 10 параметров в свой Reportviewer с именем Factor_Name_1 в Factor_Name_10 и в свойствах при их создании отметьте «Разрешить нулевое значение». Затем я написал код, чтобы добавить данные для параметров, сохранив существующие имена столбцов, прежде чем переименовывать их в заголовки Factor1, Factor2. Factor10 следующим образом (обратите внимание, что меня не беспокоит в первом столбце «Возраст»):

Переустановив имена столбцов, как только я создам соответствующий параметр, данные будут правильно привязаны. Все, что я должен был сделать, в моем дизайнере RDLC — заменить существующие заголовки соответствующими значениями параметров. Затем, чтобы скрыть выбранные столбцы, я устанавливаю выражение видимости для текстовых полей параметров и строк:

Теперь, если я выбираю 1 или 10 столбцов, зритель отображает правильное количество столбцов и скрывает те, которые не требуются. В настоящее время я работаю над повторением столбца «возраст» (уже повторяются заголовки) и добавлением верхнего/нижнего колонтитула во время выполнения, но в настоящее время у меня есть отчет, который отображает нужные мне данные с правильными заголовками.

Спасибо @Reza Aghaei за то, что вы меня на правильном пути.

C# DataGr > In this tutorial, you will learn how to use the DataGridView control and its supporting classes, in detail. Displaying data in a tabular format is a task you are likely to perform frequently. The DataGridView control is designed to be a complete solution for displaying tabular data with Windows Forms. The DataGridView control is highly configurable and extensible, and it provides many properties, methods, and events to customize its appearance and behavior.

The DataGridView control makes it easy to define the basic appearance of cells and the display formatting of cell values. The cell is the fundamental unit of interaction for the DataGridView. All cells derive from the DataGridViewCell base class. Each cell within the DataGridView control can have its own style, such as text format, background color, foreground color, and font. Typically, however, multiple cells will share particular style characteristics. The data type for the cell’s Value property by default is of type Object.

The following chapters explain the basics of DataGridView control and steps through an example that builds simple C# programs. All the source code in the following examples ,we chose the Pubs database, which comes with SQL Server , as our target database.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих