Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2013, 00:32   #1
devf
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 17
По умолчанию Из dataGridView в Access???

Здравствуйте!
В бд есть таблица , к примеру первая картинка внизу

В dataGridView для удобства она с помощью цикла выводиться в таком виде вторая картинка

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

Попробовал это сделать - проходит сообщение, что изменения выполнены, а на самом деле ничего не происходит...

Вот код :

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace GridTest
{
    public partial class Form1 : Form
    {
        DataTable datatable, datatable2;
        OleDbConnection con;
        OleDbDataAdapter adapter, adapter2;
        DataSet dset, dset2;
        string consring;
        DataRow datarow, datarow2;
        int sum;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {

                consring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\dBase.mdb";
                con = new OleDbConnection(consring);
                con.Open();
                adapter = new OleDbDataAdapter("SELECT distinct boxes from cabinet", con);// Выбрать неповторяющиеся имена из boxeses
                dset = new DataSet();
                adapter.Fill(dset, "cabinet");
                datatable = new DataTable();
                datatable = dset.Tables["cabinet"];
                // dataGridView1.DataSource = datatable; сразу вывести всю таблицу

                //делаем столбцы вручную
                dataGridView1.Columns.Add("item", "item");
                dataGridView1.Columns.Add("options", "options");

                // счетчик для цикла
                int counRows = datatable.Rows.Count;

                int[] schet = new int[counRows];// массив для суммирования позиций номера раскрашиваемой строки
               
                // цикл
                for (int n = 0; n < counRows; n++)
                {
                    datarow = dset.Tables["cabinet"].Rows[n];
                    string valueInboxes = Convert.ToString(datarow["boxes"]);// Переменная для второго запроса
                    dataGridView1.Rows.Add(datarow.ItemArray); // вывод в грид неповторяющихся имен в колонке boxes  
                    dataGridView1.Rows[n+sum].DefaultCellStyle.BackColor = Color.Aquamarine; 

                    // Подготавливаем для вложенного цикла
                    adapter2 = new OleDbDataAdapter("SELECT  item, options FROM cabinet WHERE boxes= '" + valueInboxes + "'", con);
                    dset2 = new DataSet();
                    adapter2.Fill(dset2, "cabinet");
                    datatable2 = new DataTable();
                    datatable2 = dset2.Tables["cabinet"];                  
                    int counRows2 = datatable2.Rows.Count;
                    // вложенный цикл
                    for (int k = 0; k < counRows2; k++)
                    {
                        datarow2 = dset2.Tables["cabinet"].Rows[k];
                        dataGridView1.Rows.Add(datarow2.ItemArray);// выводим данные для каждого значения boxes
                        schet[n] = counRows2;
                    }
                    sum = schet.Sum();
                }
                OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adapter2);
                con.Close();            }
            // обработка ошибок
            catch (Exception ex)
            {
                MessageBox.Show("Ничего не получилось " + ex.Message);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                adapter2.Update(dset2.Tables["cabinet"]);
                MessageBox.Show("Изменения в базе данных выполнены!",
                "Уведомление о результатах", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Изменения в базе данных выполнить не удалось! "+ ex.Message, "Уведомление о результатах", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

    }
}
Изображения
Тип файла: jpg baza.jpg (36.5 Кб, 56 просмотров)
Тип файла: jpg grid.jpg (17.4 Кб, 56 просмотров)
devf вне форума Ответить с цитированием
Старый 29.11.2013, 23:28   #2
devf
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 17
По умолчанию

И че - да нечо!?
Просто получить ответ на простой вопрос - уже вольность?
За сутки ни одного знающего человека не появилось?
devf вне форума Ответить с цитированием
Старый 30.11.2013, 00:25   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

во первых зачем тут 2 селекта? да еще и в цикле
достаточно одного а потом методами таблицы все это делать - нет проблем
во вторых, почему именно dataset? не проще ли linq2sql или ef
в третьих, я например, не очень понял чего делать надо.. вроде все уже заполнено, если вы хотите добавлять то не понятно как вы это хотите делать для box1?

гуи у вас продуман или нет?

ну и таблица не очень нормальная, тут напрашиваются 2 таблицы и связь

Последний раз редактировалось eval; 30.11.2013 в 00:28.
eval вне форума Ответить с цитированием
Старый 30.11.2013, 00:36   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

по поводу апдейта, не видно где идет обновление данных в dset2.Tables["cabinet"],
вы не биндите их в грид, следовательно они должны ручками обновляться
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ACCESS как правильно построить запрос и передать его в datagridview (C#) Lustin_Aleks Помощь студентам 8 26.11.2013 13:18
Обновление БД Access из DataGridView Bella Помощь студентам 0 12.05.2013 15:12
ADO.net + ACCESS аномалия с DataGridView Necare Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 24.05.2012 16:32
datagridview и access lkjuio C# (си шарп) 1 29.04.2011 16:56
Поиск в datagridview(заполненной из бд access) snakes2517 Общие вопросы .NET 1 06.04.2010 16:29