Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 10.04.2016
Сообщений: 23
1

Сохранение импортированных данных в datagridview, который связан DataSet

11.04.2016, 09:16. Показов 1277. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Необходимо организовать импорт с листа Excel в datagridview из Ecel, который отображает данные из DataSet. DataSet ссылается на БД в SQL Server. Проблема в том, что после записи значений в последнюю строки datagridview, я не могу сохранить изменения в DataSet, из-за чего рушится мой цикл. Сохранение должно происходить в блоке try, но я не могу найти рабочий метод для этого. Вместо сохранения возвращается список старых значений. Помогите разобраться с этим, пару часов просидел на msdn и в search.
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
            int rCnt = 1, drCnt = 0; //строка Excel, строка datagridview
            int cCnt = 1, dcCnt = 0;//аналогично
            drCnt = dataGridView1.Rows.Count-1;//номер новой строки
 
             for (int i = 1; i <= ExcelR.Rows.Count;i++)
               {
                   for (int j = 1; j <= ExcelR.Columns.Count; j++)
                   {
                       dataGridView1.Rows[drCnt].Cells[dcCnt].Value = ExcelWS.Cells[i, cCnt].value;
                       dcCnt++;
                       cCnt++;
 
                   }
                  try
                  {
                      dataGridView1.DataSource = dogDataSet.Pappy;
                      //записывает данные из DataGridView в DataSet
                      pappyTableAdapter.Update(dogDataSet);
                      //обновляет базу данных      
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.Message, "Ошибка");
                  }
 
                  dcCnt = 0;//возвращение к 1 колуму dataGridView
                  cCnt = 1;//возвращение к "A" Excel
                   drCnt++;
               }
            ExcelWB.Close(true, null, null);
            exApp.Quit();
Добавлено через 19 часов 37 минут
Методом тыка сработал такой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
           drCnt = 23;
            cCnt = 0;
            dataGridView1.CurrentCell = dataGridView1.Rows[drCnt].Cells[dcCnt];
            dataGridView1.CurrentCell.Value = ExcelWS.Cells[1,1].value;
            dcCnt++;
            dataGridView1.CurrentCell = dataGridView1.Rows[drCnt].Cells[dcCnt];
            dataGridView1.CurrentCell.Value = ExcelWS.Cells[1,2].value;
            dcCnt++;
            dataGridView1.CurrentCell = dataGridView1.Rows[drCnt].Cells[dcCnt];
            dataGridView1.CurrentCell.Value = ExcelWS.Cells[1,3].value;
            dcCnt++;
 
            dataGridView1.CurrentCell.Selected = true;
            dataGridView1.DataSource = dogDataSet.Pappy;
            pappyTableAdapter.Update(dogDataSet.Pappy);
Считаю его абсолютно некорректным, поэтому вопрос остается открытым. Все методы типа EndEdit(), Commit() или AcceptChange() не сохраняют.

Добавлено через 44 минуты
Оказывается и этот метод не работает. Им можно сохранить только 1 строку, следующая строка снова стопорится.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 09:16
Ответы с готовыми решениями:

Сохранение изменений сделанных программно в datagridview который связан с бд Access
В общем, у меня есть датагрид связанный через выбор источника данных, и он полностью заблокирован...

Как сортировать содержание dataGridView, который привязан к dataSet
Привет всем! как сортировать содержание dataGridView который привязан к dataSet// в таблице 3...

Сохранение данных из DataSet в БД
Здравствуйте. В моей программе появились непонятная проблема. В бд имеется две таблицы (Projects...

Сохранение данных из DataSet
Как сделать так, чтобы при изменении DataGridView сохранялись данные назад в базу данных! Я...

6
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.04.2016, 11:48 2
Лучший ответ Сообщение было отмечено Gikdar как решение

Решение

Gikdar,
Данные нужно заносить не в DataGridView а в DataSet.
После чего вызвать метод Update у вашего адаптера.
Для отображения изменении в DGV - просто переприсвойте DataSource:
C#
1
2
dataGridView1.DataSource = null;
dataGridView1.DataSource = dogDataSet.Pappy;
1
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.04.2016, 11:55 3
Gikdar, проблема именно в том, что dgv связанный с источником не следует использовать для программного изменения данных. Данные нужно вставлять (изменять, удалять) непосредственно в источник (-е).
0
0 / 0 / 1
Регистрация: 10.04.2016
Сообщений: 23
11.04.2016, 15:19  [ТС] 4
А как добавить в DataSet новую строку со значениями? Попробовал dataSet.Table.Rows[i].Field<>, но не понял, что должен содержать Field.

Добавлено через 12 минут
Или какие параметры нужно задавать dataSet.Table.Rows.Add()?

Добавлено через 27 минут
C#
1
2
3
4
5
  DataRow Row = fruitsDataSet.Fruits.NewRow();
            Row["FruitName"] = "яблоко";
            Row["Calory"] = 100; 
             
            fruitsDataSet.Fruits.Rows.Add(Row);
Получилось таким методом, но я теперь не понимаю как сохранить изменения в DataSet.
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
11.04.2016, 15:21 5
Цитата Сообщение от Gikdar Посмотреть сообщение
что должен содержать Field
в переводе с английского Field - поле. Поле в строке - это ячейка. Таким образом получаем вопрос: "что должна содержать ячейка?"... Есть смысл отвечать?

Цитата Сообщение от Gikdar Посмотреть сообщение
Или какие параметры нужно задавать dataSet.Table.Rows.Add()?
Ответ очевиден: параметры, которые нужны для формирования строки )

Добавлено через 43 секунды
Цитата Сообщение от Gikdar Посмотреть сообщение
я теперь не понимаю как сохранить изменения в DataSet.
куда сохранить?
0
0 / 0 / 1
Регистрация: 10.04.2016
Сообщений: 23
11.04.2016, 16:55  [ТС] 6
Не могу сохранить методом dataSet.Table.AcceptChanges(), какой метод используется для сохранения записи в DataSet?

Добавлено через 5 минут
Конечный получатель таблица в обозревателе объектов SQL server, если Вы об этом.

Добавлено через 23 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
 try
            {
                
 
                fruitsTableAdapter.Update(fruitsDataSet.Fruits);
                //обновляет базу данных      
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка");
            }
Работает.

Добавлено через 55 минут
Вот полностью рабочий код, но у меня сразу возник ещё один вопрос, что случается с Row после завершения цикла? Неужели все строки продублируются и будут храниться не только в dataset, но ещё и в Row. Если использовать Row.Delete(), при завершении итерации перебора столбцов, то возникает ошибка.
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
41
42
43
44
45
46
47
48
49
50
51
52
  {
            /*using System.Data.SqlClient;
            using Microsoft.Office.Interop.Excel;
            using Microsoft.Office.Tools.Excel;
            using Excel = Microsoft.Office.Interop.Excel;*/
 
            string fname;
 
            OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Файйл Excel|*.XXLSX;*.XLS;*.XLSX";
            opf.ShowDialog();
            fname = opf.FileName;
 
            Excel.Application exApp = new Excel.Application();
            // exApp.Visible = true;
            Excel._Workbook ExcelWB;
            Excel.Worksheet ExcelWS;
            Excel.Range ExcelR;
            ExcelWB = exApp.Workbooks.Open(fname, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing);
 
            ExcelWS = (Excel.Worksheet)ExcelWB.Worksheets.Item[1];
            ExcelR = ExcelWS.UsedRange;
            int dataSetColumn, ExcelColumn;
 
 
            
            for (int i = 1; i <= ExcelR.Rows.Count; i++)
            {
                dataSetColumn = 1;
                ExcelColumn = 1;
                DataRow Row = fruitsDataSet.Fruits.NewRow();
                for (int j = 1; j <= ExcelR.Columns.Count; j++)
                {
                    Row[dataSetColumn] = ExcelWS.Cells[i,ExcelColumn].Value;
                    dataSetColumn++;
                    ExcelColumn++;
                    
                }
                fruitsDataSet.Fruits.Rows.Add(Row);
                fruitsTableAdapter.Update(fruitsDataSet.Fruits);//сохранение
              
            }
            
            dataGridView1.DataSource = null;
            dataGridView1.DataSource = fruitsDataSet.Fruits;//обновление 
            
            ExcelWB.Close(true, null, null);
            exApp.Quit();
        }
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.04.2016, 18:04 7
Вынесите строку
C#
1
fruitsTableAdapter.Update(fruitsDataSet.Fruits);//сохранение
из цикла. Вы сейчас формируете SQL запрос для каждой строки, что долго. Лучше вызвать Update один раз после выхода из цикла.

Цитата Сообщение от Gikdar Посмотреть сообщение
Вот полностью рабочий код, но у меня сразу возник ещё один вопрос, что случается с Row после завершения цикла? Неужели все строки продублируются и будут храниться не только в dataset, но ещё и в Row
Ничего там не дублируется. Вы же сами добавляете созданный Row в таблицу:
C#
1
fruitsDataSet.Fruits.Rows.Add(Row);
А таблица это просто список Row. То есть ваша переменная Row и список в Fruits.Rows будут ссылаться на один и тот же объект. Дублирования нет.
1
11.04.2016, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 18:04
Помогаю со студенческими работами здесь

Сохранение изменений DataSet в базе данных
Добрый вечер! Работаю в VS Community 2015. Имеется база данных stock.mdf и в ней таблица...

Обновление данных в БД из dataGridView (DataSet)
Здравствуйте! Не так давно начал изучение c#, пишу простенькую программку для работы с БД. На форме...

обновление данных в dataset|datagridview
допустим у меня в datagridview dgEdit отображена какая-нибудь таблица Rooms и к этому dgEdit-у...

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


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

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