44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
1

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

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

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

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

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

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

Экспорт данных из DataGridView в DataSet
Есть DataGridView заполненный программно, содержит поля "Имя", "Дата", "Номер". Есть файл SQL...

14
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
29.01.2012, 20:36 2
Была задача по привязке 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
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
01.02.2012, 23:47  [ТС] 3
О, спасибо большое! Сейчас проверить нет возможности, т.к. еду с очередной командировки (сижу сейчас со смартфона). Домой приеду, обязательно проверю. Заранее плюс
0
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
02.02.2012, 12:24 4
Задача интересная самому хочется разобраться. Если что появиться по теме пишите. Пытался узнать у знакомого он предлагает только построчно разбирать и писать в XML файл - не то. Хочется чтобы создавался полноценный XML источник с сохранением схемы и т.д. Нужно на основе DataGridView перед записью в файл создать источник DataSet и можно будет использовать WriteXml. Только как на основе DataGridView таблицы заполнить источник? В MSDN есть создание источника с помощью LINQ, но не из DataGrid.
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.02.2012, 12:32 5
Цитата Сообщение от Antrix Посмотреть сообщение
Собственно, на форму выкинул оба компонента, в DataGridView указал источник данных dataSet1. Как указать DataSet количество столбцов и строк, за которыми он будет "следить" и каким образом экспортировать все это в *.xml?
не совсем понимаю, что значит "следить?
0
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
02.02.2012, 17:21  [ТС] 6
Цитата Сообщение от nio Посмотреть сообщение
не совсем понимаю, что значит "следить?
Да рыскал по форумах в поисках решения, и там упоминалось, что DataSet как бы "следит за DataGridView, то бишь импортирует себе данные с таблицы, если я правильно понял. Еще раз повторю, я никогда не работал с базами и даже не планировал с ними сталкиваться Но таки заставили
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
02.02.2012, 17:43 7
DataSet, а точнее DataTable, является источником данных для dataGridView. Экспорт данных из источника в XML делается методом WriteXML, обратное чтение методом ReadXML, dataGridView к этому не имеет никакого отношения.
В чем именно заключается проблема?
Цитата Сообщение от Antrix Посмотреть сообщение
DataSet как бы "следит за DataGridView
скорее наоборот, DataGridView всего лишь отображает данные источника и отправляет ему происходящие изменения, DataSet при этом "ни чего не знает о существовании" DataGridView

Добавлено через 1 минуту
Цитата Сообщение от Antrix Посмотреть сообщение
я никогда не работал с базами
А БД тут при чем?
1
44 / 44 / 8
Регистрация: 11.04.2010
Сообщений: 139
02.02.2012, 22:53  [ТС] 8
Цитата Сообщение от nio Посмотреть сообщение
А БД тут при чем?
Прошу прощения... я хотел сказать "с БД и таблицами в частности".
0
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
03.02.2012, 21:20 9
Цитата Сообщение от nio Посмотреть сообщение
DataSet, а точнее DataTable, является источником данных для dataGridView. Экспорт данных из источника в XML делается методом WriteXML, обратное чтение методом ReadXML, dataGridView к этому не имеет никакого отношения.
Но ведь можно создать источник (одну таблицу) DataSet на основе DataGridView ?
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
05.02.2012, 09:57 10
Цитата Сообщение от ibmpc Посмотреть сообщение
создать источник (одну таблицу) DataSet на основе DataGridView
Не представляю, как это выглядит. Показать можешь?
0
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
05.02.2012, 12:30 11
Цитата Сообщение от 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
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
05.02.2012, 14:04 12
Цитата Сообщение от ibmpc Посмотреть сообщение
Идея создать DataSet динамически и наполнить.
Давно известно, это азы.
ibmpc, показаный код привязывает готовый DataTable к DataGridView, а не позволяет
Цитата Сообщение от ibmpc Посмотреть сообщение
создать DataTable на основе уже заполненного DataGridView
Цитата Сообщение от ibmpc Посмотреть сообщение
Может можно создать DataTable на основе уже заполненного DataGridView используя LINQ.
Ты вот только объясни зачем нужен этот гемор, если можно сразу работать с привязанным DataTable?
0
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
06.02.2012, 15:21 13
Цитата Сообщение от 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 14
Например, вот так:

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 15
А примерно так:
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
18.04.2012, 06:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2012, 06:50
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru