Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
22 Июль 2025, 21:24:21
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Страниц  :   Вниз
  Печать  
Автор Тема: c# и Access  (Прочитано 4960 раз)
0 Пользователей и 1 Гость смотрят эту тему.
_EmptY™
...and only emptiness inside...
Гродненец
**

Репутация: +17/-0
Offline Offline

Пол: Мужской
Сообщений: 151


И-и-и не толпитесь у меня под ногами!!!

Просмотр профиля
« : 25 Май 2010, 22:00:00 »

Народ, помогите, пожалуйста! Нужно оформить вывод данных.
В общем, есть база данных, сделанная в access'e, нужно оформить вывод данных, полученных запросом из таблицы. Первоначальный вариант получился с выводом в richTextBox, но, во-первых, это ничерта не красиво, а во-вторых, нет никакой возможности редактировании информации с последующим занесением сделанных изменений в таблицу. Пожалуйста объясните как данные можно вывести в dataGridView.
Записан

При рождении человек получает чистую книгу, и фломастеры чтобы на ней рисовать, все в наших руках, мы сами выбираем свою судьбу...
Мы не можем вырвать из нашей жизни ни одной страницы… но можем бросить в огонь всю книгу...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #1 : 26 Май 2010, 00:23:46 »

http://www.rsdn.ru/article/dotnet/datagridview20.xml
http://naugrim.ru/notes/privyazka-dannyx-data-binding-c
http://www.rsdn.ru/article/dotnet/DataGridView20part2.xml
Записан

HTTP Error 404 - File or directory not found.
_EmptY™
...and only emptiness inside...
Гродненец
**

Репутация: +17/-0
Offline Offline

Пол: Мужской
Сообщений: 151


И-и-и не толпитесь у меня под ногами!!!

Просмотр профиля
« Ответ #2 : 01 Июнь 2010, 21:45:27 »

спасибо большое! еще один вопрос:
как записать изменения, сделанные в dataGridView, в саму таблицу? Пробовал так
Код:
        private void UpdateDB(string Path)
        {
            dAdapter.Update((DataSet)dataGridView1.DataSource);
            dAdapter.Update((DataSet)dataGridView2.DataSource);
        }
но не получается Грустный пишет: "При обновлении не удалось найти TableMapping["Table"] или DataTable "Table"."
есть еще такой вариант:
Код:
            string SelectCmd = "SELECT * FROM People";
            OleDbDataAdapter dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
            OleDbCommandBuilder buildCmd = new OleDbCommandBuilder(dAdapter);
            dAdapter.InsertCommand = buildCmd.GetInsertCommand();
            dAdapter.DeleteCommand = buildCmd.GetDeleteCommand();
            dAdapter.UpdateCommand = buildCmd.GetUpdateCommand();
            dAdapter.Update(dSet.Tables["People"]);
но он тоже не работает...
« Последнее редактирование: 01 Июнь 2010, 22:27:55 от _EmptY™ » Записан

При рождении человек получает чистую книгу, и фломастеры чтобы на ней рисовать, все в наших руках, мы сами выбираем свою судьбу...
Мы не можем вырвать из нашей жизни ни одной страницы… но можем бросить в огонь всю книгу...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #3 : 02 Июнь 2010, 00:12:30 »

не вижу у тебя наличие
//create a DataTable to hold the query results
DataTable dTable = new DataTable();

//fill the DataTable
dAdapter.Fill(dTable);

Возможно это тебе поможет http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-database
или здесь http://www.gotdotnet.ru/forums/1/33324/

еще по биндингу, если не разобрался http://www.rsdn.ru/article/dotnet/Data_Binding_Basics.xml?print

да и сложно сказать, что здесь не так, не дебажа проект, ты уверен, что dataGridView1.DataSource возвращает DataSet, посмотри дебагером, что за объект, проверь в дебагере же, что находиться в DataTable
Записан

HTTP Error 404 - File or directory not found.
_EmptY™
...and only emptiness inside...
Гродненец
**

Репутация: +17/-0
Offline Offline

Пол: Мужской
Сообщений: 151


И-и-и не толпитесь у меня под ногами!!!

Просмотр профиля
« Ответ #4 : 02 Июнь 2010, 04:01:35 »

С биндингом разобрался давно (ошибка была глупейшая), но все равно спасибо за доп. инфу по нему - как говорится, информации много не бывает...
А по поводу того, уверен ли я что возвращает dSet - ну 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 WindowsFormsApplication2
{

    public partial class Form1 : Form
    {
        string Path = @"H:\!Разное\!С диска С\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication2\WindowsFormsApplication2\bin\Debug\empty.mdb";
        DataSet dSet = new DataSet();
        OleDbDataAdapter dAdapter = null;
        public Form1()
        {
            InitializeComponent();
            SearchBtn.Visible = false;
            textBox3.Visible = false;
            textBox2.Visible = false;
            textBox1.Visible = false;
            поИмениToolStripMenuItem.Checked = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadBase(Path);
            dataGridView1.Visible = true;
            dataGridView2.Visible = true;
        }

        private DataSet LoadBase(string Path)
        {
            string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" + "data source=" + Path;
            OleDbConnection BaseConnect = new OleDbConnection(connectionString);
            string baseerrtxt = "";
            DataSet dSet = new DataSet();
            try
            {
                BaseConnect.Open();
                baseerrtxt = "" + BaseConnect.State;
                if (baseerrtxt == "Open")
                {
                    //MessageBox.Show("База открыта");
                    textBox3.Text = "" + baseerrtxt;
                }
            }
            catch (OleDbException ex)
            {
                MessageBox.Show("Не удалось открыть базу!" + "\n" + ex.Message);
                baseerrtxt = "" + BaseConnect.State;
                textBox3.Text = "" + baseerrtxt;
            }
            if ((поИмениToolStripMenuItem.Checked == false) && (запросSQLToolStripMenuItem.Checked == false)) //вывод исходной базы
            {
                string SelectCmd = "SELECT * FROM People";
                dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
                dAdapter.Fill(dSet, "People");
                SelectCmd = "SELECT * FROM Stuff";
                dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
                dAdapter.Fill(dSet, "Stuff");
                dSet.Relations.Add("nRelation", dSet.Tables["People"].Columns["ФИО"], dSet.Tables["Stuff"].Columns["ФИО"]);
                dataGridView1.DataSource = dSet;
                dataGridView1.DataMember = "People";
                dataGridView2.DataSource = dSet;
                dataGridView2.DataMember = "People.nRelation";
            }
            else if (поИмениToolStripMenuItem.Checked == true) //поиск в базе по ФИО сотрудника
            {
                string emp = textBox1.Text;
                if (emp != "")
                {
                    string SelectCmd = "SELECT * FROM People  WHERE ФИО = " + "'" + @emp + "'";
                    dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
                    dAdapter.Fill(dSet, "People");
                    SelectCmd = "SELECT * FROM Stuff  WHERE ФИО = " + "'" + @emp + "'";
                    dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
                    dAdapter.Fill(dSet, "Stuff");
                    dSet.Relations.Add("nRelation", dSet.Tables["People"].Columns["ФИО"], dSet.Tables["Stuff"].Columns["ФИО"]);
                    dataGridView1.DataSource = dSet;
                    dataGridView1.DataMember = "People";
                    dataGridView2.DataSource = dSet;
                    dataGridView2.DataMember = "People.nRelation";
                }
                else if (emp == "")
                {
                    MessageBox.Show("Введите ФИО");
                }

            }
            else if (запросSQLToolStripMenuItem.Checked == true) //отображение данных выданных с помощью SELECT-запроса
            {
                string SelectCmd = textBox2.Text;
                try
                {
                    dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
                    dSet.EnforceConstraints = false;
                    dAdapter.Fill(dSet, "People");
                    dAdapter.Fill(dSet, "Stuff");
                    dataGridView1.DataSource = dSet;
                    dataGridView1.DataMember = "People";
                    BaseConnect.Close();
                }
                catch (OleDbException)
                {
                    MessageBox.Show("Введен неправильный SQL-запрос!","Возможна ошибка");
                }

            }
            return dSet;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (запросSQLToolStripMenuItem.Checked == true)
            {
                LoadBase(Path);
            }
            else if (поИмениToolStripMenuItem.Checked == true)
            {
                LoadBase(Path);
            }
        }
        private void поИмениToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textBox2.Visible = false;
            dataGridView2.Visible = true;
            SearchBtn.SetBounds(120, SearchBtn.Location.Y, SearchBtn.Width, SearchBtn.Height);
            запросSQLToolStripMenuItem.Checked = false;
            поИмениToolStripMenuItem.Checked = true;
            выводБазыToolStripMenuItem.Checked = false;
            SearchBtn.Visible = true;
            textBox1.Visible = true;
            textBox1.BringToFront();
        }

        private void запросSQLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SearchBtn.Visible = true;
            SearchBtn.SetBounds(623, SearchBtn.Location.Y, SearchBtn.Width, SearchBtn.Height);
            поИмениToolStripMenuItem.Checked = false;
            выводБазыToolStripMenuItem.Checked = false;
            textBox1.Visible = false;
            dataGridView2.Visible = false;
            textBox2.Visible = true;
            запросSQLToolStripMenuItem.Checked = true;
        }

        private void выводБазыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dataGridView1.Visible = true;
            поИмениToolStripMenuItem.Checked = false;
            запросSQLToolStripMenuItem.Checked = false;
            выводБазыToolStripMenuItem.Checked = true;
            textBox1.Visible = false;
            textBox2.Visible = false;
            SearchBtn.Visible = false;
            dataGridView2.Visible = true;
            LoadBase(Path);
        }

        private void UpdateDB(string Path) //корявая попытка апдейта исходной базы
        {
            dAdapter.Update(dSet, "People");
            dAdapter.Update(dSet, "Stuff");
        }

        private void Form1_Closing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Сохранить изменения?", "Сохранение", MessageBoxButtons.YesNo) == DialogResult.OK)
            {
                UpdateDB(Path);
            }
        }
    }
}
собственно после написанного вами:
не вижу у тебя наличие //create a DataTable to hold the query resultsDataTable dTable = new DataTable();//fill the DataTabledAdapter.Fill(dTable);
появляется вопрос: обязательно ли работать в данном случае именно с DataTable?
« Последнее редактирование: 02 Июнь 2010, 04:43:03 от _EmptY™ » Записан

При рождении человек получает чистую книгу, и фломастеры чтобы на ней рисовать, все в наших руках, мы сами выбираем свою судьбу...
Мы не можем вырвать из нашей жизни ни одной страницы… но можем бросить в огонь всю книгу...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #5 : 02 Июнь 2010, 10:29:30 »

Смотри сюда: http://msdn.microsoft.com/ru-ru/library/system.data.oledb.oledbdataadapter.update(v=VS.90).aspx
и решай сам, что использовать удобней
« Последнее редактирование: 02 Июнь 2010, 13:21:52 от coolasm » Записан

HTTP Error 404 - File or directory not found.
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,099 секунд. Запросов: 20.