Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
 Аватар для Antrix
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139

Привязка DataSet к DataGridView (экспорт таблицы в XML)

29.01.2012, 17:53. Показов 7536. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане! Помогите, пожалуйста, с привязкой DataSet к DataGridView, что бы экспортировать содержимое таблицы DataGridView в *.xml. То есть, сама таблица состоит из 5 столбцов и будет иметь около 100 строчек. Все будет заполнятся вручную без использования SQL и т.д.
Собственно, на форму выкинул оба компонента, в DataGridView указал источник данных dataSet1. Как указать DataSet количество столбцов и строк, за которыми он будет "следить" и каким образом экспортировать все это в *.xml? Что то типа такого?:
C#
1
2
            string filePath = @"D:\111.xml";
            dataSet1.WriteXml(filePath);
Я дико извиняюсь, если описание показалось малоинформативным, т.к. ранее никогда не работал с таблицами.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2012, 17:53
Ответы с готовыми решениями:

Привязка DataSet к DataGridView
string strSQL; strSQL = "SELECT * FROM table1"; string strConn; strConn =...

Экспорт DataSet в XML шаблон
Есть БД Firebird с помощью SQL делаю запрос и данные вытаскиваю в DataSet после чего их хочу экспортировать в готовый XML шаблон Excel...

Экспорт данных из Dataset в Xml
Всем доброго времени суток . Суть проблемы в следующем : Иметься xml файл вида <?xml version="1.0"...

14
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
29.01.2012, 20:36
Была задача по привязке DataGridView к xml файлу на форуме, думаю обратное вполне выполнимо.
Использование XML в DataSet
Загрузка DataSet из XML

Добавлено через 5 минут
Пример по похожей задаче с сохранением
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class MyWriter : XmlTextWriter
{
    private DataSet m_DataSet = null;
    private int m_Progress = 0;
 
    // Это наш новый конструктор, которому для мониторинга передается датасет
    public MyWriter(string filename, DataSet dataset) : base(filename,Encoding.Default)
    {
        m_DataSet = dataset;
        m_Progress = 0;
    }
 
    // А это наша заглушка, куда идет обращение при открытии xml-тэга
    public override void WriteStartElement(string prefix, string localName, string ns)
    {
        // Старый функционал оставляем
        base.WriteStartElement(prefix,localName,ns);
 
        // Если имя открываемого тэга есть имя датасета, значит можно в догонку дорисовать ExtendedProperties
        if (localName == m_DataSet.DataSetName)
        {
            base.WriteStartElement("ExtendedProperties");
            foreach (DictionaryEntry entry in m_DataSet.ExtendedProperties)
            {
                base.WriteStartElement("Property");
                base.WriteAttributeString("name",(string)entry.Key);
                base.WriteAttributeString("value",(string)entry.Value);
                base.WriteEndElement();
            }
            base.WriteEndElement();
        }
 
        // Если совпадает с именем таблицы, значит рисуется запись таблицы, можем отразить этот факт на прогресс-баре.
        if (localName == "SomeTbl")
        {
            m_Progress++;
            // Процент рассчитывается как m_Progress/m_DataSet.Tables["SomeTbl"].Rows.Count*100.
        }
    }
}
1
 Аватар для Antrix
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
01.02.2012, 23:47  [ТС]
О, спасибо большое! Сейчас проверить нет возможности, т.к. еду с очередной командировки (сижу сейчас со смартфона). Домой приеду, обязательно проверю. Заранее плюс
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
02.02.2012, 12:24
Задача интересная самому хочется разобраться. Если что появиться по теме пишите. Пытался узнать у знакомого он предлагает только построчно разбирать и писать в XML файл - не то. Хочется чтобы создавался полноценный XML источник с сохранением схемы и т.д. Нужно на основе DataGridView перед записью в файл создать источник DataSet и можно будет использовать WriteXml. Только как на основе DataGridView таблицы заполнить источник? В MSDN есть создание источника с помощью LINQ, но не из DataGrid.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.02.2012, 12:32
Цитата Сообщение от Antrix Посмотреть сообщение
Собственно, на форму выкинул оба компонента, в DataGridView указал источник данных dataSet1. Как указать DataSet количество столбцов и строк, за которыми он будет "следить" и каким образом экспортировать все это в *.xml?
не совсем понимаю, что значит "следить?
0
 Аватар для Antrix
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
02.02.2012, 17:21  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
не совсем понимаю, что значит "следить?
Да рыскал по форумах в поисках решения, и там упоминалось, что DataSet как бы "следит за DataGridView, то бишь импортирует себе данные с таблицы, если я правильно понял. Еще раз повторю, я никогда не работал с базами и даже не планировал с ними сталкиваться Но таки заставили
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.02.2012, 17:43
DataSet, а точнее DataTable, является источником данных для dataGridView. Экспорт данных из источника в XML делается методом WriteXML, обратное чтение методом ReadXML, dataGridView к этому не имеет никакого отношения.
В чем именно заключается проблема?
Цитата Сообщение от Antrix Посмотреть сообщение
DataSet как бы "следит за DataGridView
скорее наоборот, DataGridView всего лишь отображает данные источника и отправляет ему происходящие изменения, DataSet при этом "ни чего не знает о существовании" DataGridView

Добавлено через 1 минуту
Цитата Сообщение от Antrix Посмотреть сообщение
я никогда не работал с базами
А БД тут при чем?
1
 Аватар для Antrix
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
02.02.2012, 22:53  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
А БД тут при чем?
Прошу прощения... я хотел сказать "с БД и таблицами в частности".
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
03.02.2012, 21:20
Цитата Сообщение от nio Посмотреть сообщение
DataSet, а точнее DataTable, является источником данных для dataGridView. Экспорт данных из источника в XML делается методом WriteXML, обратное чтение методом ReadXML, dataGridView к этому не имеет никакого отношения.
Но ведь можно создать источник (одну таблицу) DataSet на основе DataGridView ?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
05.02.2012, 09:57
Цитата Сообщение от ibmpc Посмотреть сообщение
создать источник (одну таблицу) DataSet на основе DataGridView
Не представляю, как это выглядит. Показать можешь?
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
05.02.2012, 12:30
Цитата Сообщение от nio Посмотреть сообщение
Показать можешь?
Именно это нет, если бы мог - вся проблема была бы решена. Идея создать DataSet динамически и наполнить. Постараюсь что-то подобное найти.

Добавлено через 3 минуты
Задача сводиться к созданию DataTable на основе DataGridView

Добавлено через 13 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MyTable.WriteXml(@"1.xml",XmlWriteMode.WriteSchema,true); // Пишем XML
        }
        DataTable MyTable;
        private void Form1_Load(object sender, EventArgs e)
        {
            // Создаём таблицу с нужной структурой
            MyTable = new DataTable("MyTable");
            MyTable.Columns.Add(new DataColumn("Column1", typeof(System.String)));
            MyTable.Columns.Add(new DataColumn("Column2", typeof(System.String)));
            MyTable.Columns.Add(new DataColumn("Column3", typeof(System.String)));
 
            // Делаем MyTable источником данных для dataGridView1
            dataGridView1.DataSource = MyTable;
        }
    }
Как то так примерно (это конечно ранее связывание, а не то что я имел в виду по началу. Работает главное). Могут быть ошибки. На основе DataTable можно создать DataSet

Создание DataTable на основе запроса (LINQ to DataSet) Еще ко-что. Может можно создать DataTable на основе уже заполненного DataGridView используя LINQ.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
05.02.2012, 14:04
Цитата Сообщение от ibmpc Посмотреть сообщение
Идея создать DataSet динамически и наполнить.
Давно известно, это азы.
ibmpc, показаный код привязывает готовый DataTable к DataGridView, а не позволяет
Цитата Сообщение от ibmpc Посмотреть сообщение
создать DataTable на основе уже заполненного DataGridView
Цитата Сообщение от ibmpc Посмотреть сообщение
Может можно создать DataTable на основе уже заполненного DataGridView используя LINQ.
Ты вот только объясни зачем нужен этот гемор, если можно сразу работать с привязанным DataTable?
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
06.02.2012, 15:21
Цитата Сообщение от nio Посмотреть сообщение
если можно сразу работать с привязанным DataTable?
Если у меня уже существует настроенный DataGridView мне придется создавать соответствующую ему структуру DataTable:
Цитата Сообщение от ibmpc Посмотреть сообщение
C#
1
2
3
4
5
// Создаём таблицу с нужной структурой
MyTable = new DataTable("MyTable");
MyTable.Columns.Add(new DataColumn("Column1", typeof(System.String)));
MyTable.Columns.Add(new DataColumn("Column2", typeof(System.String)));
MyTable.Columns.Add(new DataColumn("Column3", typeof(System.String)));
А если мне это нафиг не нужно? Тем более с числовыми и особенно типами вроде DataTime (как было в оригинале) это дело ведет себя не адекватно - нужно обрабатывать введенный пользователем неверно значения. И еще возможно ли добавлять в DataTable поля отличного от TextBox типа, которые доступны в DataGridView? Хотелось бы чтобы DataTable создавался непосредственно перед сохранением в XML на основе DataGridView.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
17.02.2012, 18:54
Например, вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   public static DataTable GetDataTable(DataGridView dataGridView)
        {
 
            DataGridView dgv = dataGridView;
            DataTable table = new DataTable();
 
            // Create columns 
            for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
            {
                table.Columns.Add(dgv.Columns[iCol].Name);
            }
 
              foreach (DataGridViewRow row in dgv.Rows)
            {
                if (row.IsNewRow) continue;
                DataRow datarw = table.NewRow();
 
                for (int iCol = 0; iCol < dgv.Columns.Count; iCol++)
                {
                    datarw[iCol] = row.Cells[iCol].Value;
                }
 
                table.Rows.Add(datarw);
            }
 
            return table;
        }
Добавляем сюда проверка типа колонки DGV и обработку данных колонки в зависимости от её типа и все.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
18.04.2012, 06:50
А примерно так:
C#
1
2
3
for(int r = 0; r < dataGridView1.RowCount; r++)
                for(int c = 0; c < dataGridView1.ColumnCount; c++)
                    medexpertDataSet.DataPresentation.Rows[r][c] = dataGridView1[c,r];
а затем уже делать medexpertDataSet.WriteXml(); и т.д.

Только таблица, на которую опирается DataGridView, должна уже присутствовать в DataSet.
А вообще самый лучший вариант - это как делается в Borland.Eco. Там базы данных(шаблонные) основаны полностью на XML DataSet (т.е. Данные напрямую сохраняются в XML на диске). Может есть что-то подобное в VisualStudio?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2012, 06:50
Помогаю со студенческими работами здесь

Экспорт данных из DataGridView в DataSet
Есть DataGridView заполненный программно, содержит поля &quot;Имя&quot;, &quot;Дата&quot;, &quot;Номер&quot;. Есть файл SQL database (*mdf), с таблицей...

Вывод DataSet в DataGridView (2 таблицы)
хочу вывести в датагридвью, 2 таблицы со связями, в таком формате: в начале строки стоят &quot;+&quot; ,при нажатии на которые...

Экспорт данных из DataGridView в XML файл
Доброго времени суток. Столкнулся с проблемой экспорта таблиц БД выведенных в DataGridView в файл XML. string libr = &quot;SELECT *...

Как записать текущий Header колонки dataSet (или dataGridView) в xml?
Доброго времени суток. Пишу таблицу dataGridView в xml-файл через метод dataSet.WriteXml, всё прекрасно работает, но заголовки...

Экспорт таблицы из DataGridView в excel .xlsx
Как в Visual Studio 2017 можно реализовать экспорт из таблицы DataGridView в файл формата .xlsx? Если можно, максимально подробно опишите...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru