Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод таблицы в DataGridView, не отображается таблица в DataGridView 
V
    Опции темы
cypher
Дата 30.6.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



Не могу уже два дня решить проблепу! Поиск юзал долго таких тем много но из всего пересмотреного так и не смог решить проблему..  smile 
    так вот я подключаюсь к файлу Access.mdb, после создаю DataSet notaryDS = new DataSet; и загружаю таблицу из Access.mdb в notaryDS через OleDbDataAdapter: 
     OleDbDataAdapter dataAdaper_xls = new OleDbDataAdapter("SELECT * FROM notary", connect_xls);
            dataAdaper_xls.Fill(notaryDS);

После чего создаю DataColumn ... создаю DataTable и додаю в свою DataTable свои DataColumn вот так:
        DataTable notaryTable = new DataTable("Notary");
            notaryTable.Columns.AddRange(new DataColumn[]
                {id_nColumn, name_nColumn, streetName_nColumn, codeStreet_nColumn, 
                 house_nColumn, addressInf_nColumn, phone_nColumn, 
                 organization_nColumn, otherInf_nColumn});

 Наконец додаю DataTable в DataSet
      notaryDS.Tables.Add(notaryTable);
 Потом мне надо все ето отобразить в DataGridView делаю вот так  dataGridViewN.DataSource = notaryTable; в Троельсен пишет что ето и есть отображение таблицы DataTable в DataGridView;(но наверное я что-то не понял)
                  вот мой код на C#
                                              
Код

     public Form1()
        {
            InitializeComponent();
            OleDbConnection connect_xls = new OleDbConnection();
            string strConn = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\'{0}\';Jet OLEDB:Database Password=god;", "NotaryInfo.mdb");
            connect_xls = new OleDbConnection(strConn);
            //creating DataSet
            DataSet notaryDS = new DataSet("notary from NotaryInfo");
            notaryDS.ExtendedProperties["TimeStamp"] = DateTime.Now;
            notaryDS.ExtendedProperties["Company"] = "Information Centre";
            //creating DataAdapter
            connect_xls.Open();
            OleDbDataAdapter dataAdaper_xls = new OleDbDataAdapter("SELECT * FROM notary", connect_xls);
            dataAdaper_xls.Fill(notaryDS);

            DataColumn id_nColumn = new DataColumn("ID", typeof(int));
            id_nColumn.Caption = "ID";
            id_nColumn.ReadOnly = true;
            id_nColumn.AllowDBNull = false;
            id_nColumn.Unique = true;
            id_nColumn.AutoIncrement = true;
            DataColumn name_nColumn = new DataColumn("name", typeof(string));
            DataColumn streetName_nColumn = new DataColumn("street_name", typeof(string));
            DataColumn codeStreet_nColumn = new DataColumn("code_street", typeof(int));
            DataColumn house_nColumn = new DataColumn("house", typeof(string));
            DataColumn addressInf_nColumn = new DataColumn("address_inf", typeof(string));
            DataColumn phone_nColumn = new DataColumn("phone", typeof(string));
            DataColumn organization_nColumn = new DataColumn("organization", typeof(string));
            DataColumn otherInf_nColumn = new DataColumn("other_inf", typeof(string));

            //creating DataTable
            DataTable notaryTable = new DataTable("Notary");
            notaryTable.Columns.AddRange(new DataColumn[]
                {id_nColumn, name_nColumn, streetName_nColumn, codeStreet_nColumn, 
                 house_nColumn, addressInf_nColumn, phone_nColumn, 
                 organization_nColumn, otherInf_nColumn});
            //Set primary key
            notaryTable.PrimaryKey = new DataColumn[] { notaryTable.Columns[0] };
            //Add DataTable in DataSet 
            notaryDS.Tables.Add(notaryTable);

            dataGridViewN.DataSource = notaryTable;
        }

 После всего етого я запузкаю своё приложение и в DataGridView отображаются только названия столбцов([B]смотри файл!) которые я создав в DataTable а отобразить содержимое таблицы никак не могу, как ето сделать?[/B]
     всюду пишут про BindingSource, но я не понимаю что он делает, пробовал я и так делать 
            BindingSource bindSource = new BindingSource();
            bindSource.DataMember = "notary";
            bindSource.DataSource = notaryDS;

  А может ето вообще не то... обясните пожалуйста как мне вручную вывести свою таблицу в DataGridView.
знаю можно сделать автоматически Data Source Configuration Wizard тогда все отображается но он генерирует кода на 1500 строк.

        

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  DataGridView_.JPG 20,20 Kb
PM MAIL   Вверх
Idsa
Дата 30.6.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Хм... Не очень понятно, зачем ты добавляешь таблицу в DataSet, а потом в качестве DataSource указываешь все ту же таблицу... Хотя проблема, конечно, не в этом.
Ты бы лучше не картинку прикрепил, а проект!


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
cypher
Дата 30.6.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



не могу! там база даных которую нельзя выставлять...
PM MAIL   Вверх
tol05
Дата 30.6.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



ты в качестве источника данных к DataGridView указываешь не таблицу Dataset (который ты так качественно запонил smile ) а пустую таблицу notaryTable, которую ты создал руками, но данными не заполнил...
вместо 
Код

dataGridViewN.DataSource = notaryTable;

напиши
Код

dataGridViewN.DataSource = notaryDS.Tables[0];

а весь код, начиная со строки 16 до строки 40 - удали вообще...

P.S. вариант 2: 
Код

public Form1()    
        {    
            InitializeComponent();    
            OleDbConnection connect_xls = new OleDbConnection();    
            string strConn = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\'{0}\';Jet OLEDB:Database Password=god;", "NotaryInfo.mdb");    
            connect_xls = new OleDbConnection(strConn);    
            //creating DataSet    
            DataSet notaryDS = new DataSet("notary from NotaryInfo");    
            notaryDS.ExtendedProperties["TimeStamp"] = DateTime.Now;    
            notaryDS.ExtendedProperties["Company"] = "Information Centre";    
           
            DataColumn id_nColumn = new DataColumn("ID", typeof(int));    
            id_nColumn.Caption = "ID";    
            id_nColumn.ReadOnly = true;    
            id_nColumn.AllowDBNull = false;    
            id_nColumn.Unique = true;    
            id_nColumn.AutoIncrement = true;    
            DataColumn name_nColumn = new DataColumn("name", typeof(string));    
            DataColumn streetName_nColumn = new DataColumn("street_name", typeof(string));    
            DataColumn codeStreet_nColumn = new DataColumn("code_street", typeof(int));    
            DataColumn house_nColumn = new DataColumn("house", typeof(string));    
            DataColumn addressInf_nColumn = new DataColumn("address_inf", typeof(string));    
            DataColumn phone_nColumn = new DataColumn("phone", typeof(string));    
            DataColumn organization_nColumn = new DataColumn("organization", typeof(string));    
            DataColumn otherInf_nColumn = new DataColumn("other_inf", typeof(string));    
            //creating DataTable    
            DataTable notaryTable = new DataTable("Notary");    
            notaryTable.Columns.AddRange(new DataColumn[]    
                {id_nColumn, name_nColumn, streetName_nColumn, codeStreet_nColumn,    
                 house_nColumn, addressInf_nColumn, phone_nColumn,    
                 organization_nColumn, otherInf_nColumn});    
            //Set primary key    
            notaryTable.PrimaryKey = new DataColumn[] { notaryTable.Columns[0] };    
            //Add DataTable in DataSet    
            notaryDS.Tables.Add(notaryTable);
           //creating DataAdapter    
            connect_xls.Open();    
            OleDbDataAdapter dataAdaper_xls = new OleDbDataAdapter("SELECT * FROM notary", connect_xls);    
            dataAdaper_xls.Fill(notaryDS);    //здесь твою таблицу адаптер заполнит данными    
            dataGridViewN.DataSource = notaryTable;    //таблица уже заполнена
        }


Это сообщение отредактировал(а) tol05 - 30.6.2007, 17:54


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
cypher
Дата 30.6.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



tol05 smile  Очень большое спасибо!!!! 
зделал так как ты сказал и все заработало! респект.
теперь надо сделать чтобы я ввёл изменение и при нажатии кнопки ети изменения из DataGridView переносились в БД! пока что не представляю себе как ето сделать... если есть предложения буду очень признателен!
PM MAIL   Вверх
tol05
Дата 30.6.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



1. Адаптер нужно сделать переменной класса. И все остальные объекты (датасет, таблицы) тоже... Чтоб доступ к ним был из любого метода...
2. Нужно написать Update-команду (вот ссылка)
Код

 private void button1_Click(object sender, EventArgs e)
    {
      dataAdaper_xls.UpdateCommand = new SqlCommand("UPDATE table1 SET ...", connect_xls);//текст команды измени
      dataAdaper_xls.Update(notaryDS);
    }


И вообще, почитать MSDN по DataAdapter, DataSet. Или просто книжку по ADO.NET


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
cypher
Дата 30.6.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



Код

       private void button1_Click(object sender, EventArgs e)
    {
      dataAdaper_xls.UpdateCommand = new SqlCommand("UPDATE table1 SET ...", connect_xls);//текст команды измени
      dataAdaper_xls.Update(notaryDS);
    }



я вот только не понимаю что надо обновлять, тоесть как отслеживать что именно было изменино в DataGridView, или может можно всё сразу обновить??, внести в БД нажатием етой кнопки все изменения из DataGridView. Тоесь что нужно подставлять в SET.. "UPDATE мояТаблица SET аТутЧто?", как узнать что я изменил в DataGridView? 

P.S. понимаю что вопросы наивные но у меня времени очень мало, надо всё доделать до Понедельника!! smile 
PM MAIL   Вверх
cypher
  Дата 30.6.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



Ура решил проблему!! 
    
Код


              private void button1_Click(object sender, EventArgs e)
        {
           
            OleDbCommandBuilder commBuilder = new OleDbCommandBuilder(dataAdaper_xls);
            dataAdaper_xls.UpdateCommand = commBuilder.GetUpdateCommand();
            dataAdaper_xls.Update(notaryDS.Tables[0]);

          
        }


не совсем понимаю как работает но.. при нажатии кнопки вносит изменения в БД сделаные в DataGridView.
PM MAIL   Вверх
thomas
Дата 1.7.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



cypher, 
Не забудь дописать
Код

notaryDS.Tables[0].AcceptChanges()


 smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
cypher
Дата 1.7.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2007

Репутация: нет
Всего: нет



Цитата(thomas @ 1.7.2007,  12:33)
cypher, 
Не забудь дописать
Код

notaryDS.Tables[0].AcceptChanges()


 smile

а зачем если оно и так работает, что ета строчка будет делать? smile 
PM MAIL   Вверх
thomas
Дата 1.7.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



cypher, 

Затем что надо читать первоисточники. 
Там слева оглавление есть, посмотри пригодиться.  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Idsa
Дата 2.7.2007, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(thomas @  1.7.2007,  17:50 Найти цитируемый пост)
Затем что надо читать первоисточники. Там слева оглавление есть, посмотри пригодиться.  

Хм... Насколько я знаю, в случае успешного апдейта адаптер сам меняет значения RowState на UnChanged... так что неудивительно, что у cypher все и так работает.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
thomas
Дата 2.7.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Idsa, 
Цитата

так что неудивительно, что у cypher все и так работает. 

Да база у него обновляется, но представь себе ситуацию:
- внесли изменения в DataGridView 
- обновили базу
- очистили DataGridView (не нужно больше отображать эти данные)
- сделали какие-то другие действия
И внимание !!!
Нужно СНОВА вывести данные из этой таблицы ДатаСет в DataGridView 

Что в данном случае будет отображаться? 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
tol05
Дата 2.7.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



thomas, а я в первоисточниках другое читал как-то...  
Цитата

При использовании метода Update, порядок выполнения следующий: 

Значения в DataRow перемещаются в значения параметров. 
Вызывается событие OnRowUpdating. 
Команда выполняется. 
Если команда установлена на FirstReturnedRecord, то первый возвращаемый результат помещается в DataRow. 
Если есть выходные параметры, то они помещаются в DataRow. 
Вызывается событие OnRowUpdated. 
Вызывается AcceptChanges. 

http://msdn.microsoft.com/library/rus/defa...updatetopic.asp

и писал когда-то вот что
 smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 2.7.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



thomas, 
Цитата(thomas @  2.7.2007,  10:12 Найти цитируемый пост)
Что в данном случае будет отображаться? 

Похоже, ты не обратил внимание на мой пост:
Цитата(Idsa @  2.7.2007,  07:43 Найти цитируемый пост)
в случае успешного апдейта адаптер сам меняет значения RowState на UnChanged... так что неудивительно, что у cypher все и так работает.




--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.