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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помомогите связать DataGridView и dataSet 
V
    Опции темы
okaton
Дата 13.10.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго времени сутокsmile
Помогите решить проблему. Есть DataGridView1 и DataGridView2, также есть 2 класса.
Нужно связать DataGridView1 и DataGridView2 с двумя классами таким образом, что бы когда выбираешь строку в DataGridView1 в DataGridView2 отображались дополнительные данные.
После этого организовать связь с dataSet, ну и в нем соответственно сохранять и загружать данные.
Код

public class CLASS_dataGridView2
        {
            string[] brand = null;
            public string[] SubClass_Brand
            {
                get
                {
                    return brand;
                }
            }

            string[] recruitment = null;
            public string[] SubClass_Recruitment
            {
                get
                {
                    return recruitment;
                }
            }

            string[] registrationID = null;
            public string[] SubClass_RegistrationID
            {
                get
                {
                    return registrationID;
                }
            }
            string[] subComment = null;
            public string[] SubClass_SubComment
            {
                get
                {
                    return subComment;
                }
            }

            string[] notes = null;
            public string[] SubClass_Notes
            {
                get
                {
                    return notes;
                }
            }
        }

        public class CLASS_dataGridView1
        {
            string factoryID = null;
            public string SubClass_FactoryID
            {
                get
                {
                    return factoryID;
                }
            }

            string idComplete = null;
            public string SubClass_IDComplete
            {
                get
                {
                    return idComplete;
                }
            }

            string departament = null;
            public string SubClass_Departament
            {
                get
                {
                    return departament;
                }
            }

            string responsible = null;
            public string SubClass_Responsible
            {
                get
                {
                    return responsible;
                }
            }

            string building = null;
            public string SubClass_Building
            {
                get
                {
                    return building;
                }
            }

            string room = null;
            public string SubClass_Room
            {
                get
                {
                    return room;
                }
            }

            string comment = null;
            public string SubClass_Comment
            {
                get
                {
                    return comment;
                }
            }

            public CLASS_dataGridView2 class_dataGridView2;
        }

PM MAIL   Вверх
Partizan
Дата 13.10.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



кросспостинг - это не хорошо...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
okaton
Дата 13.10.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Partizan, может это и не хорошо, но мне нужна реально действенная помощь, причем довольно срочно, а обратится мне больше не куда. И что же мне делать? бублики пинать?

PM MAIL   Вверх
MasterOfCode
Дата 14.10.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Цитата(okaton @  14.10.2008,  01:05 Найти цитируемый пост)
Нужно связать DataGridView1 и DataGridView2 с двумя классами таким образом, что бы когда выбираешь строку в DataGridView1 в DataGridView2 отображались дополнительные данные.

Это можно сделать так:
Код

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;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        class MyClass
        {
            public MyClass(int _id, string _name)
            {
                id = _id;
                name = _name;
            }
            public int id
            {
                get;
                set;
            }
            public string name
            {
                get;
                set;
            }
        }

        class MyParentClass
        {
            public MyParentClass(int _id, int _parentid, string _name)
            {
                id = _id;
                parentId = _parentid;
                parentName = _name;
            }
            public int id
            {
                get;
                set;
            }
            public int parentId
            {
                get;
                set;
            }
            public string parentName
            {
                get;
                set;
            }
        }
        List<MyClass> dgv1;
        List<MyParentClass> dgv2;
        List<MyParentClass> dgv2_;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dgv1 = new List<MyClass>();
            dgv2 = new List<MyParentClass>();
            for (int i = 0; i < 3; i++)
            {
                dgv1.Add(new MyClass(i, i.ToString()));
                for(int j = -1; j < i; j++)
                {
                    dgv2.Add(new MyParentClass(j, i, j.ToString()));
                }
            }
            dataGridView1.DataSource = dgv1;
            IEnumerable<MyParentClass> query = dgv2.Where(pcls => pcls.parentId == Convert.ToInt32(dataGridView1[0, 0].Value));
            dgv2_ = query.ToList<MyParentClass>();
            dataGridView2.DataSource = dgv2_;
            dataGridView2.Refresh();
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            IEnumerable<MyParentClass> query = dgv2.Where(pcls => pcls.parentId == Convert.ToInt32(dataGridView1[e.ColumnIndex, e.RowIndex].Value));
            dgv2_ = query.ToList<MyParentClass>();
            dataGridView2.DataSource = dgv2_;
            dataGridView2.Refresh();
        }
    }
}


Добавлено через 31 секунду
Подставь свои классы только smile


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 14.10.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MasterOfCode, спасибо большое.

using System.Linq у меня такого нет, это из framework 3?
По ходу 3.5 сейчас установлюsmile

Это сообщение отредактировал(а) okaton - 14.10.2008, 14:28
PM MAIL   Вверх
MasterOfCode
Дата 14.10.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Цитата(okaton @  14.10.2008,  17:20 Найти цитируемый пост)
using System.Linq у меня такого нет, это из framework 3? 

3.5


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 14.10.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Скажите а MVS 2005 работает с Framework 3.5?
PM MAIL   Вверх
okaton
Дата 14.10.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



решил скачать MVS 2008  smile 

Это сообщение отредактировал(а) okaton - 14.10.2008, 15:49
PM MAIL   Вверх
Magnifico
Дата 14.10.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MasterOfCode взаимно.
okaton ключевые слова: Nowa + MVS 2008 


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
okaton
Дата 14.10.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Magnifico @ 14.10.2008,  21:13)
okaton ключевые слова: Nowa + MVS 2008

Стесняюсь спросить, а что такое Nowa?

Это сообщение отредактировал(а) okaton - 14.10.2008, 21:04
PM MAIL   Вверх
Partizan
Дата 15.10.2008, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



присоединяюсь к вопросу) Что ещё за Nowa?  smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
okaton
Дата 15.10.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Установил 9 студию smile
Возникли траблы в отладчике

Код

IEnumerable<MyParentClass> query = dgv2.Where(pcls => pcls.parentId == Convert.ToInt32(dataGridView1[0, 0].Value));

Цитата

Error    1    'System.Collections.Generic.List<Set1DataWork.Form1.MyParentClass>' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'System.Collections.Generic.List<Set1DataWork.Form1.MyParentClass>' could be found (are you missing a using directive or an assembly reference?)    ...\Form1.cs    82    53    Set1DataWork


Код

dgv2_ = query.ToList<MyParentClass>();

Цитата

Error    2    'System.Collections.Generic.IEnumerable<Set1DataWork.Form1.MyParentClass>' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerable<Set1DataWork.Form1.MyParentClass>' could be found (are you missing a using directive or an assembly reference?)    ...\Form1.cs    83    27    Set1DataWork


Код

IEnumerable<MyParentClass> query = dgv2.Where(pcls => pcls.parentId == Convert.ToInt32(dataGridView1[e.ColumnIndex, e.RowIndex].Value));

Цитата

Error    3    'System.Collections.Generic.List<Set1DataWork.Form1.MyParentClass>' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'System.Collections.Generic.List<Set1DataWork.Form1.MyParentClass>' could be found (are you missing a using directive or an assembly reference?)    ...\Form1.cs    89    53    Set1DataWork


Код

dgv2_ = query.ToList<MyParentClass>();

Цитата

Error    4    'System.Collections.Generic.IEnumerable<Set1DataWork.Form1.MyParentClass>' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerable<Set1DataWork.Form1.MyParentClass>' could be found (are you missing a using directive or an assembly reference?)    ...\Form1.cs    90    27    Set1DataWork


Ругается на .Where и .ToList<MyParentClass>
 smile Что он от меня хочет?


Это сообщение отредактировал(а) okaton - 15.10.2008, 10:55
PM MAIL   Вверх
Idsa
Дата 15.10.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(okaton @  15.10.2008,  14:50 Найти цитируемый пост)
Ругается на .Where и .ToList<MyParentClass>
 smile Что он от меня хочет?

Необходимо подключить using System.Linq;


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


Бывалый
*


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

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



Idsa, упс, это я действительно прогляделsmile

только почему-то он у меня не подключается:
Цитата

Error    1    The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)

PM MAIL   Вверх
MasterOfCode
Дата 15.10.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Добавь библиотеку в reference


--------------------
user posted image
PM ICQ   Вверх
Idsa
Дата 15.10.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(okaton @  15.10.2008,  16:12 Найти цитируемый пост)
олько почему-то он у меня не подключается:

Хм... Для этого нужна библиотека System.Core. Если у Вас действительно стоит VS 2008 и Target Framework выставлен в 3.5, то она должна добавляться автоматически.


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


Бывалый
*


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

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



MasterOfCode, Idsa, спасибоsmile
я проект конвертировал с 2005 на 2008... ну и о нововведения не знал...
зашел в свойства проекта и обнаружил подключение framework, соответственно был 2.0, поменял на 3.5 и ура!

Подскажите пожалуйста, а как мне теперь заполнить dataSet?
PM MAIL   Вверх
MasterOfCode
Дата 15.10.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Тебе сначала нужно заполнить DataTable.
Вот ссылка на MSDN DataTable
dataSet1.Tables.Add(YouDataTable);



Это сообщение отредактировал(а) MasterOfCode - 17.10.2008, 21:38


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 15.10.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



MasterOfCode, спасибо, буду разбиратьсяsmile

Попутно появились вопросы:

1. А как мне к этой красоте подключить столбцы, которые я нарисовал в дизайнере dataGridView?
С этим разобрался, надо в свойстве Колонки DataGridView изменить DataPropertyName подставив член класса 


2. Сортировка колонок не происходит, отладчик ругается  
Код

IEnumerable<MyParentClass> query = dgv2.Where(pcls => pcls.parentId == Convert.ToInt32(dataGridView1[e.ColumnIndex, e.RowIndex].Value));

Цитата

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Как можно выйти из этого положения?

3. Кто-нибудь пользовался методом System.Data.DataTableExtensions.ToDataTable<T>(IEnumerable<T> source), эту табличку потом можно подключить к dataSet?

Это сообщение отредактировал(а) okaton - 16.10.2008, 12:16
PM MAIL   Вверх
okaton
Дата 16.10.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня не получается создать новую строку (а тем более правило для создания строк) в таблицах. :(
Как сделать так чтобы можно было создать новую строку в 2 таблицах и соответственно данные в ней привязать к коллекции. 
Все создание строк работает только на этом этапе smile 
Код

dgv1.Add(new CLASS_dgv1(0, "", "", "", "", "", "", ""));
dgv1.Add(new CLASS_dgv1(1, "", "", "", "", "", "", ""));            
                        
dgv2.Add(new CLASS_dgv2(0, "", "", "", "", ""));
dgv2.Add(new CLASS_dgv2(0, "", "", "", "", ""));
dgv2.Add(new CLASS_dgv2(1, "", "", "", "", ""));
dgv2.Add(new CLASS_dgv2(1, "", "", "", "", ""));

Ну и еще проблема не работает сортировка в dataGridView...

Код

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;

namespace Set1DataWork
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        class CLASS_dgv1//класс для 1 таблицы
        {
            public CLASS_dgv1(int _IndexTable1, string _FactoryID, string _IDComplete, string _Departament, string _Responsible, string _Building, string _Room, string _Comment)
            {
                Column0_IndexTable1 = _IndexTable1;
                Column01_FactoryID = _FactoryID;                        
                Column02_IDComplete = _IDComplete;
                Column03_Departament = _Departament;
                Column04_Responsible = _Responsible;
                Column05_Building = _Building;
                Column06_Room = _Room;
                Column07_Comment = _Comment;
                               
            }
            public int Column0_IndexTable1
            {
                get;
                set;
            }
            public string Column01_FactoryID
            {
                get;
                set;
            }
            public string Column02_IDComplete
            {
                get;
                set;
            }
            public string Column03_Departament
            {
                get;
                set;
            }
            public string Column04_Responsible
            {
                get;
                set;
            }
            public string Column05_Building
            {
                get;
                set;
            }
            public string Column06_Room
            {
                get;
                set;
            }
            public string Column07_Comment
            {
                get;
                set;
            }
            
        }

        class CLASS_dgv2 //класс для 2 таблицы
        {
            public CLASS_dgv2(int _IndexTable2, string _Brand, string _Recruitment, string _RegistrationID, string _SubComment, string _Notes)
            {
                Column00_IndexTable2 = _IndexTable2;
                Column08_Brand = _Brand;
                Column09_Recruitment = _Recruitment;
                Column10_RegistrationID = _RegistrationID;
                Column11_SubComment = _SubComment;
                Column12_Notes = _Notes;
            }
            public int Column00_IndexTable2
            {
                get;
                set;
            }
            public string Column08_Brand
            {
                get;
                set;
            }
            public string Column09_Recruitment
            {
                get;
                set;
            }
            public string Column10_RegistrationID
            {
                get;
                set;
            }
            public string Column11_SubComment
            {
                get;
                set;
            }
            public string Column12_Notes
            {
                get;
                set;
            }
        }
        
        List<CLASS_dgv1> dgv1;   
        List<CLASS_dgv2> dgv2;      
        List<CLASS_dgv2> dgv2_;
         
         
                   
        private void toolStripButton1_Click(object sender, EventArgs e)
        {            
            dgv1 = new List<CLASS_dgv1>();
            dgv2 = new List<CLASS_dgv2>();       
                      

            dgv1.Add(new CLASS_dgv1(0, "", "", "", "", "", "", ""));
            dgv1.Add(new CLASS_dgv1(1, "", "", "", "", "", "", ""));            
                        
            dgv2.Add(new CLASS_dgv2(0, "", "", "", "", ""));
            dgv2.Add(new CLASS_dgv2(0, "", "", "", "", ""));
            dgv2.Add(new CLASS_dgv2(1, "", "", "", "", ""));
            dgv2.Add(new CLASS_dgv2(1, "", "", "", "", ""));
            
                       
            dataGridView1.DataSource = dgv1;              
            IEnumerable<CLASS_dgv2> query = dgv2.Where(pcls => pcls.Column00_IndexTable2 == Convert.ToInt32(dataGridView1[0, 0].Value));
            dgv2_ = query.ToList<CLASS_dgv2>(); 
            dataGridView2.DataSource = dgv2_; 
            dataGridView2.Refresh();                   
        }
               
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            IEnumerable<CLASS_dgv2> query = dgv2.Where(pcls => pcls.Column00_IndexTable2 == Convert.ToInt32(dataGridView1[e.ColumnIndex, e.RowIndex].Value));
            dgv2_ = query.ToList<CLASS_dgv2>();
            dataGridView2.DataSource = dgv2_;
            dataGridView2.Refresh(); 
        }
    }
}


Это сообщение отредактировал(а) okaton - 16.10.2008, 18:44
PM MAIL   Вверх
MasterOfCode
Дата 16.10.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Код

IEnumerable<CLASS_dgv2> query = dgv2.Where(pcls => pcls.Column00_IndexTable2 == Convert.ToInt32(dataGridView1[0, e.RowIndex].Value));

я ошибся в этой строчке, e.ColumnIndex нужно заменить на номер колонки с идишником, в данном случаи на 0.

Цитата(okaton @  16.10.2008,  21:41 Найти цитируемый пост)
У меня не получается создать новую строку 

А у грида разрешение на добавление стоит?

Цитата(okaton @  16.10.2008,  21:41 Найти цитируемый пост)
Ну и еще проблема не работает сортировка в dataGridView...


А у грида разрешение на сортировку стоит?


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 16.10.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
А у грида разрешение на добавление стоит?
А у грида разрешение на сортировку стоит? 

Стоит. Строки можно добавлять и сортировать. Пока я не нажимаю:
Код

private void toolStripButton1_Click(object sender, EventArgs e)



Это сообщение отредактировал(а) okaton - 16.10.2008, 20:24
PM MAIL   Вверх
MasterOfCode
Дата 16.10.2008, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Если после повторного нажатия, то возможно из за этого:
Код

dgv1 = new List<CLASS_dgv1>();
dgv2 = new List<CLASS_dgv2>();

Замени на:
Код

if (dgv1 == null)
dgv1 = new List<CLASS_dgv1>();
if (dgv2 == null)
dgv2 = new List<CLASS_dgv2>();



--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 16.10.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



После первого нажатия. 

Ругается на сортировку:
Цитата

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            IEnumerable<CLASS_dgv2> query = dgv2.Where(pcls => pcls.Column00_IndexTable2 == Convert.ToInt32(dataGridView1[0, e.RowIndex].Value));

Цитата

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

e.RowIndex =-1

Строки не добавляются. После изменения при повторном нажатии добавляются 2  строки в dataGridView2 с сохранением данных, но к каждой строке в таблице dataGridView1

Это сообщение отредактировал(а) okaton - 16.10.2008, 21:42
PM MAIL   Вверх
MasterOfCode
Дата 17.10.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



В событие CellClick добавь условие:
Код

            if (e.RowIndex >= 0)
            {
                IEnumerable<CLASS_dgv2> query = dgv2.Where(pcls => pcls.Column00_IndexTable2 == Convert.ToInt32(dataGridView1[0, e.RowIndex].Value));
                dgv2_ = query.ToList<CLASS_dgv2>();
                dataGridView2.DataSource = dgv2_;
                dataGridView2.Refresh();
            }



--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 17.10.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добавил. Ошибка соответственно исчезла. 
В остальном тоже самое: сортировка не происходит, строки не добавляются  smile  
Цитата

Если пользователь прокрутит control вниз до последней строчки, будет отображена дополнительная, специальная строчка для внесения новой записи. Такая строчка всегда помечена символом звездочки на заголовке. Когда пользователь любым способом перемещается в эту строку, DataGridView добавляет новую запись со значениями по умолчанию. Если фокус ввода находится в этой строке, и пользователь нажимает Esc, новая запись пропадает, а фокус ввода перемещается на строчку выше.

Звездочка после нажатия toolStripButton1_Click также исчезает.

Это сообщение отредактировал(а) okaton - 17.10.2008, 19:57
PM MAIL   Вверх
okaton
Дата 17.10.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я не очень понимаю концепцию dataTable. Мне при этом нужна будет коллекция которая у меня сейчас есть или dataTable сама является коллекцией (если это можно так назвать)
PM MAIL   Вверх
okaton
Дата 18.10.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Чем можно заменить эту строчку для dataDridView?
Код

dataGrid1.SetDataBinding(dataSet, "ParentTable");


вот так
Код

dataGridView1.DataSource = dataSet.Tables["ParentTable"];


Это сообщение отредактировал(а) okaton - 18.10.2008, 15:34
PM MAIL   Вверх
okaton
Дата 18.10.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В общем я переработал код еще раз:
Код

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;

namespace Set1DataWork
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent(); 
            MakeDataTables();
        }
        
        class CLASS_dgv1//класс для 1 таблицы
        {
            public CLASS_dgv1(int _IndexTable1, string _FactoryID, string _IDComplete, string _Departament, string _Responsible, string _Building, string _Room, string _Comment)
            {
                Column0_IndexTable1 = _IndexTable1;
                Column01_FactoryID = _FactoryID;                        
                Column02_IDComplete = _IDComplete;
                Column03_Departament = _Departament;
                Column04_Responsible = _Responsible;
                Column05_Building = _Building;
                Column06_Room = _Room;
                Column07_Comment = _Comment;
                               
            }
            public int Column0_IndexTable1
            {
                get;
                set;
            }
            public string Column01_FactoryID
            {
                get;
                set;
            }
            public string Column02_IDComplete
            {
                get;
                set;
            }
            public string Column03_Departament
            {
                get;
                set;
            }
            public string Column04_Responsible
            {
                get;
                set;
            }
            public string Column05_Building
            {
                get;
                set;
            }
            public string Column06_Room
            {
                get;
                set;
            }
            public string Column07_Comment
            {
                get;
                set;
            }
            
        }

        class CLASS_dgv2 //класс для 2 таблицы
        {
            public CLASS_dgv2(int _IndexTable2, string _Brand, string _Recruitment, string _RegistrationID, string _SubComment, string _Notes)
            {
                Column00_IndexTable2 = _IndexTable2;
                Column08_Brand = _Brand;
                Column09_Recruitment = _Recruitment;
                Column10_RegistrationID = _RegistrationID;
                Column11_SubComment = _SubComment;
                Column12_Notes = _Notes;
            }
            public int Column00_IndexTable2
            {
                get;
                set;
            }
            public string Column08_Brand
            {
                get;
                set;
            }
            public string Column09_Recruitment
            {
                get;
                set;
            }
            public string Column10_RegistrationID
            {
                get;
                set;
            }
            public string Column11_SubComment
            {
                get;
                set;
            }
            public string Column12_Notes
            {
                get;
                set;
            }
        }
                     
        private System.Data.DataSet dataSet;        
        public System.Data.DataTable table1 = new DataTable("ParentTable");  
        public DataTable table2 = new DataTable("childTable");
        public int indexTable; 


        private void MakeDataTables()
        {
            MakeParentTable();    
            MakeChildTable();     
            MakeDataRelation();  
            BindToDataGridView();
        }

        private void MakeParentTable()
        {  
            DataColumn column;
            DataRow row;
                        
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.Int32");
            column.ColumnName = "Column0_IndexTable1";
            column.AutoIncrement = true; //работает как-то не правильно
            column.Caption = "IT1";
            column.ReadOnly = true;
            column.Unique = true;
            table1.Columns.Add(column);
            
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column01_FactoryID";
            column.AutoIncrement = false;
            column.Caption = "Заводской номер";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);
            
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column02_IDComplete";
            column.AutoIncrement = false;
            column.Caption = "ID Комплекта";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column03_Departament";
            column.AutoIncrement = false;
            column.Caption = "Отдел";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);
            
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column04_Responsible";
            column.AutoIncrement = false;
            column.Caption = "Ответственный";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column05_Building";
            column.AutoIncrement = false;
            column.Caption = "Корпус";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column06_Room";
            column.AutoIncrement = false;
            column.Caption = "Комната";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);
            
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column07_Comment";
            column.AutoIncrement = false;
            column.Caption = "Примечание";
            column.ReadOnly = false;
            column.Unique = false;
            table1.Columns.Add(column);
            
            //DataColumn[] PrimaryKeyColumns = new DataColumn[1];
            //PrimaryKeyColumns[0] = table1.Columns["Column0_IndexTable1"];
            //table1.PrimaryKey = PrimaryKeyColumns;
            
            dataSet = new DataSet();
            dataSet.Tables.Add(table1);
                           
            row = table1.NewRow();
            indexTable = 0;
            row["Column0_IndexTable1"] = indexTable;                
            table1.Rows.Add(row);        
        }

        private void MakeChildTable()
        {  
            DataColumn column;
            DataRow row;

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.Int32");
            column.ColumnName = "Column00_IndexTable2";
            column.AutoIncrement = false;
            column.Caption = "IT2";
            column.ReadOnly = true;
            column.Unique = false;
            table2.Columns.Add(column);
            
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column08_Brand";
            column.AutoIncrement = false;
            column.Caption = "Наименование изделия";
            column.ReadOnly = false;
            column.Unique = false;
            table2.Columns.Add(column);            

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column09_Recruitment";
            column.AutoIncrement = false;
            column.Caption = "Комплектация";
            column.ReadOnly = false;
            column.Unique = false;
            table2.Columns.Add(column);
                        
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column10_RegistrationID";
            column.AutoIncrement = false;
            column.Caption = "Учетный номер";
            column.ReadOnly = false;
            column.Unique = false;
            table2.Columns.Add(column);
                        
            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column11_SubComment";
            column.AutoIncrement = false;
            column.Caption = "Примечание";
            column.ReadOnly = false;
            column.Unique = false;
            table2.Columns.Add(column);

            column = new DataColumn();
            column.DataType = System.Type.GetType("System.String");
            column.ColumnName = "Column12_Notes";
            column.AutoIncrement = false;
            column.Caption = "Заметки";
            column.ReadOnly = false;
            column.Unique = false;
            table2.Columns.Add(column);

            dataSet.Tables.Add(table2);
             
            row = table2.NewRow();
            indexTable = 0;
            row["Column00_IndexTable2"] = indexTable;
            table2.Rows.Add(row);
        }

        private void MakeDataRelation()
        {
            DataColumn parentColumn = dataSet.Tables["ParentTable"].Columns["Column0_IndexTable1"];
            DataColumn childColumn = dataSet.Tables["ChildTable"].Columns["Column00_IndexTable2"];
            DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn);
            dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
        }

        private void BindToDataGridView()
        {
            dataGridView1.DataSource = dataSet.Tables["ParentTable"];
            dataGridView2.DataSource = dataSet.Tables["ChildTable"];            
        }
                   

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
           dataSet.ReadXml("123.xml");
        }              

        private void toolStripButton2_Click(object sender, EventArgs e)
        {            
            dataSet.WriteXml("123.xml");
        }        

        private void toolStripButton4_Click(object sender, EventArgs e)
        {               
            CurrencyManager cmgr = (CurrencyManager)this.dataGridView1.BindingContext[this.dataGridView1.DataSource];
            DataRow row = ((DataRowView)cmgr.Current).Row;
            string column0_IndexTable1 = row["Column0_IndexTable1"].ToString();
            
            row = table2.NewRow();
            row["Column00_IndexTable2"] = column0_IndexTable1;
            table2.Rows.Add(row);
        }
    }
}


Это сообщение отредактировал(а) okaton - 20.10.2008, 12:14
PM MAIL   Вверх
okaton
Дата 20.10.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Теперь как-то нужно опять связать 1 и 2 таблицу и при создании строк предусмотреть обновление Column0_IndexTable1 и Column00_IndexTable2  smile 
Автоинкремент работает как-то не правильно, почему он увеличивается если строка не создалась?

P.S.  А что такое вот это (я понимаю что это первичный ключ таблицы, как его использовать?)
Код

DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = table1.Columns["Column0_IndexTable1"];
table1.PrimaryKey = PrimaryKeyColumns;

и вот это (тут я понимаю организовываются связи, а как организовать подходящую для меня?)
Код

DataColumn parentColumn = dataSet.Tables["ParentTable"].Columns["Column0_IndexTable1"];
DataColumn childColumn = dataSet.Tables["ChildTable"].Columns["Column00_IndexTable2"];
DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn);
dataSet.Tables["ChildTable"].ParentRelations.Add(relation);


P.P.S.
Можно каким-либо образом воздействовать на dataGridView2_UserAddedRow чтобы при добавлении новой строки в dataGridView2 учитывался этот код, если вставить на прямую соответственно добавятся много не нужных строк
Код
             
            CurrencyManager cmgr = (CurrencyManager)this.dataGridView1.BindingContext[this.dataGridView1.DataSource];
            DataRow row = ((DataRowView)cmgr.Current).Row;
            string column0_IndexTable1 = row["Column0_IndexTable1"].ToString();
            
            row = table2.NewRow();
            row["Column00_IndexTable2"] = column0_IndexTable1;
            table2.Rows.Add(row);       


Это сообщение отредактировал(а) okaton - 20.10.2008, 13:20
PM MAIL   Вверх
okaton
Дата 20.10.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Судя по всему, эта связь организована правильно, но она почему-то не работает smile 

Код

DataColumn parentColumn = dataSet.Tables["ParentTable"].Columns["Column0_IndexTable1"];
DataColumn childColumn = dataSet.Tables["ChildTable"].Columns["Column00_IndexTable2"];
DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn);
dataSet.Tables["ChildTable"].ParentRelations.Add(relation);



PM MAIL   Вверх
okaton
Дата 20.10.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Походу дело не в DataRelation, а в чем-то другом...
PM MAIL   Вверх
okaton
Дата 20.10.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А почему отладчик ругается?
Код

dataGridView2.DataMember = "Column0_IndexTable1";

Цитата

Список потомков для поля Column0_IndexTable1 создать нельзя.

PM MAIL   Вверх
okaton
Дата 20.10.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



 smile 
Ларчик просто открывался
Код

dataGridView2.DataSource = dataSet;
dataGridView2.DataMember = "ParentTable.parent2Child";


Автоинкремент работает как-то не правильно, почему-то он увеличивается если строка не создалась.
Логика-то его мне ясно, но можно ли этого избежать?

Это сообщение отредактировал(а) okaton - 21.10.2008, 01:48
PM MAIL   Вверх
okaton
Дата 22.10.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно получить все значения колонки Column0_IndexTable1 и создать условие. Если все числа в колонке идут по порядку, то добавить строку = последнее число + 1.  Если нет, то добавить строку с числом которого не хватает

Как получить все значения (массив) колонки Column0_IndexTable1 ?

Смысл такой колонка Column0_IndexTable1 уникальна, соответственно нужно что бы числа были различны и желательно по порядку (в том числе при загрузке из xml). Если кто-то может предложить другое более удачное решение буду рад  smile 
PM MAIL   Вверх
MasterOfCode
Дата 22.10.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Цитата(okaton @  22.10.2008,  13:58 Найти цитируемый пост)
Нужно получить все значения колонки Column0_IndexTable1 и создать условие. Если все числа в колонке идут по порядку, то добавить строку = последнее число + 1.  Если нет, то добавить строку с числом которого не хватает

[ИМХО]Сколько не сталкивался - это все глупости. Зачем тебе это? [/ИМХО]


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 22.10.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(MasterOfCode @ 22.10.2008,  13:55)
Цитата(okaton @  22.10.2008,  13:58 Найти цитируемый пост)
Нужно получить все значения колонки Column0_IndexTable1 и создать условие. Если все числа в колонке идут по порядку, то добавить строку = последнее число + 1.  Если нет, то добавить строку с числом которого не хватает

[ИМХО]Сколько не сталкивался - это все глупости. Зачем тебе это? [/ИМХО]

Смысл такой колонка Column0_IndexTable1 уникальна, соответственно нужно что бы числа были различны и желательно по порядку (в том числе при загрузке из xml). Если кто-то может предложить другое более удачное решение буду рад  smile

P.S. в dataDridView2 отображаются данные опирающиеся на Column0_IndexTable1

P.P.S. Почему в 2008 студии не получается совершить такое действие:
Цитата

 Дважды щелкаем по файлу Settings.settings в Solution Explorer и добавляем настройку с некоторым именем (в данном примере с именем «ColsOrder») в список. В колонке «Type» настройки нужно указать «System.Int32[]» ...

в 2005 получается, как же это сделать в 2008  smile 

Это сообщение отредактировал(а) okaton - 22.10.2008, 13:27
PM MAIL   Вверх
MasterOfCode
Дата 22.10.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

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



Выбирай максимальное и увеличивай на 1. Если будешь писать свой генератор ID на тех условиях что озвучил то он займет кучу времени чтоб выдать тебе нужную циферку, а оно надо пользователю, но мой взгляд пользователям без разницы в каком виде ты хранишь ID, лишь бы работало быстро. 
Да, и не мешало бы на каждый вопрос создавать свою тему.


--------------------
user posted image
PM ICQ   Вверх
okaton
Дата 22.10.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как я получу максимальное значение из колонки, если я не знаю как получить все значения колонки, а обращаться к каждой это наверное неправильно, хотя можно создать цикл  smile 
PM MAIL   Вверх
masel
Дата 11.1.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Добавь библиотеку в reference

Извеняюсь, за глупый вопрос но как?


PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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