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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с dataGridView 
V
    Опции темы
AndrewMonk
Дата 20.7.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Язык C#. VS 2005.
Не получается программно изменить номер текущей строки в компоненте dataGridView.

Подробнее - 

Компоненты comboBox и dataGridView загружены связанными таблицами. Нужно всего лишь при изменении SelectedIndex компонета comboBox сделать активной соответсвенную строку в dataGridView.


 smile Блин, тяжко после delphi, но требования на работе...
PM MAIL   Вверх
babutta
Дата 20.7.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



привет.
не совсем понял, что надо...
если у тебя в dataGridView стоит MultiSelect= false, то при программном выделении ячейки, строка,  которой эта ячейка принадлежит становится  текущей, если MultiSelect = true, то просто выделяется и  указатель текущей строки не меняется...

короче вот я набрасал у себя код, просто комбобокс с тремя итемами и сетка с MultiSelect= false

Код

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            dataGridView1[0, comboBox1.SelectedIndex].Selected = true;
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable table = new DataTable();
            table.Columns.Add("col 1");
            table.Columns.Add("col 2");
            table.Rows.Add("1", "1");
            table.Rows.Add("2", "2");
            table.Rows.Add("3", "3");
            dataGridView1.DataSource = table;
        }


при изменении индекса комбобокса, строка с таким же индексом в сетке становится текущей...
может поможет =)
PM MAIL   Вверх
Idsa
Дата 20.7.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



babuttaAndrewMonk просил подсказать, как
Цитата(AndrewMonk @  20.7.2007,  12:24 Найти цитируемый пост)
 программно изменить номер текущей строки в компоненте dataGridView

, а ты написал создание DataGridView и обработчик события.

AndrewMonk, по существу:
Код

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
if (dataGridView1.Columns.Count != 0)
  dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[0];

Сначала мы выставляем полнострочный режим выделения. Затем задаем CurrentCell. Конечно, в данном случае удобнее было бы задать CurrentRow... но это свойство доступно только для чтения и для получения своего значения использует CurrentCell.
Проверка в if позволяет избежать NullReferenceException в случае отсутствия стобцов. Аналогично стоит проверять и строки.


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


3D-маньяк
****


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

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



Если таблицы связанные (т.е. есть в обеих есть ключевое поле, настроен DataRelation и constraint) и контролы настроены на две разные таблицы, то при перемещении по текущему Row-у одной таблицы, текущий Row другой таблицы также будет изменяться. "Текущим" DataRow управляет BindingManager, это происходит невидимо для разработчика. Визуально это будет выглядеть как изменение выбранной строки в комбобоксе при перемещении по строкам грида, и наоборот - изменение выбранной строки в гриде при выборе строки комбобокса. Это я к тому, что никакого кода выбирающего строку программно, не нужно.


--------------------
user posted image
PM MAIL WWW   Вверх
Idsa
Дата 21.7.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mr.DUDA @  21.7.2007,  10:47 Найти цитируемый пост)
Это я к тому, что никакого кода выбирающего строку программно, не нужно.

Это если настроить DataRelation. Если человек плохо разбирается в ADO.NET, думаю, ему для начала вполне подойдет вариант программной установки выделения в событии SelectedIndexChanged комбобокса.

Цитата(mr.DUDA @  21.7.2007,  10:47 Найти цитируемый пост)
Если таблицы связанные (т.е. есть в обеих есть ключевое поле, настроен DataRelation и constraint) и контролы настроены на две разные таблицы, то при перемещении по текущему Row-у одной таблицы, текущий Row другой таблицы также будет изменяться.

Я попытался это воспроизвести. Вот, что получилось:
Код

            DataTable table1 = new DataTable("test1");
            SqlDataAdapter dataAdapter1 = new SqlDataAdapter("select * from test1", connectionString);
            dataAdapter1.Fill(table1);
            table1.PrimaryKey = new DataColumn[] { table1.Columns["id"] };
            DataTable table2 = new DataTable("test2");
            SqlDataAdapter dataAdapter2 = new SqlDataAdapter("select * from test2", connectionString);
            dataAdapter2.Fill(table2);
            table2.PrimaryKey = new DataColumn[] { table2.Columns["id"] };

            DataSet dataSet = new DataSet();
            dataSet.Tables.Add(table1);
            dataSet.Tables.Add(table2);

            DataRelation relation = new DataRelation("relation", dataSet.Tables["test1"].Columns["id"], dataSet.Tables["test2"].Columns["id"]);
            dataSet.Relations.Add(relation);

            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView1.DataSource = dataSet.Tables["test1"];
            dataGridView2.DataSource = dataSet.Tables["test2"];

Однако, описанного тобою эффекта я не заметил :(.


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


3D-маньяк
****


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

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



То что в первом фреймворке делалось легко и просто, во втором уже требует танец с бубнами в виде BindingSource:
Код

            DataSet dataSet = new DataSet();
            DataTable tbMaster = dataSet.Tables.Add("Master");
            DataTable tbDetail = dataSet.Tables.Add("Detail");

            tbMaster.Columns.Add("MasterID", typeof(int));
            tbMaster.Columns.Add("Text", typeof(string));
            tbMaster.PrimaryKey = new DataColumn[] { tbMaster.Columns[0] };
            tbDetail.Columns.Add("DetailID", typeof(int));
            tbDetail.Columns.Add("Text", typeof(string));
            tbDetail.Columns.Add("MasterID", typeof(int));
            tbDetail.PrimaryKey = new DataColumn[] { tbDetail.Columns[0] };

            // добавляем relation
            dataSet.Relations.Add("MasterDetailRelation", tbMaster.Columns[0], tbDetail.Columns[2]);

            // заполним данными без БД
            tbMaster.Rows.Add(1, "Alpha");
            tbMaster.Rows.Add(2, "Beta");
            tbMaster.Rows.Add(3, "Gamma");
            tbDetail.Rows.Add(100, "One", 1);
            tbDetail.Rows.Add(101, "Two", 2);
            tbDetail.Rows.Add(102, "Three", 3);

            // привязка
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView1.DataSource = new BindingSource(dataSet, "Master");
            dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView2.DataSource = new BindingSource(dataGridView1.DataSource, "MasterDetailRelation");


Как бы то ни было, тему можно считать закрытой.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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