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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 грида и 2 таблицы 
V
    Опции темы
Bogdan1024
  Дата 20.4.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Есть датасет:
Код

    public static class Class1
    {
        public static System.Data.DataSet GetDataSet()
        {
            System.Data.DataSet ds = new System.Data.DataSet("ds");
            System.Data.DataTable t1 = new System.Data.DataTable("t1");
            System.Data.DataColumn c1 = new System.Data.DataColumn("c1", typeof(int));
            System.Data.DataColumn c2 = new System.Data.DataColumn("c2", typeof(string));
            t1.Columns.Add(c1);
            t1.Columns.Add(c2);
            ds.Tables.Add(t1);
            System.Data.DataTable t2 = new System.Data.DataTable("t2");
            System.Data.DataColumn c3 = new System.Data.DataColumn("c3", typeof(int));
            System.Data.DataColumn c4 = new System.Data.DataColumn("c4", typeof(string));
            t2.Columns.Add(c3);
            t2.Columns.Add(c4);
            ds.Tables.Add(t2);
            t1.Rows.Add(1, "1");
            t1.Rows.Add(2, "2");
            t2.Rows.Add(1, "1-1");
            t2.Rows.Add(1, "1-2");
            t2.Rows.Add(2, "2-1");
            t2.Rows.Add(2, "2-2");
            return ds;
        }
    }

есть 2 грида
один показывает содержимое t1
второй показывает просто содержимое t2
Код

            System.Data.DataSet ds = Class1.GetDataSet();
            this.dataGridView1.DataSource = ds;            
            this.dataGridView1.DataMember = "t1";
            this.dataGridView2.DataSource = ds;
            this.dataGridView2.DataMember = "t2";

но второй должен показывать содержимое t2, для которого t1.c1 == t2.c3
как это лучше сделать?
код везде можно менять ;)

Добавлено через 1 минуту и 42 секунды
Пытался сделать так (прочитал кое-где что так можно):
в коде создания датасэта:
Код

            ds.Relations.Add(new System.Data.DataRelation("r1", c1, c3, true));

в коде формы:
Код

    this.dataGridView2.DataMember = "r1";//имя Relation'a

но не работает так


--------------------
user posted image
PM MAIL   Вверх
Ctrl
Дата 21.4.2009, 19:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот кусок кода, выдранный из юнит-тестов, который делает то что тебе надо
Фишка в синтаксисе имени детальной таблицы:
...
 detailGrid.DataMember = "MasterTable.Relation"; 
...


Код

using System;
using System.Data;
using System.Windows.Forms;

namespace MasterDetail.Test {
    public partial class FormWithMasterDetailGrids : Form {
        public FormWithMasterDetailGrids() {
            InitializeComponent();
            BindGridsToData(masterGrid, detailGrid, CreateData(5, 5));
        }
        void BindGridsToData(DataGridView masterGrid, DataGridView detailGrid, DataSet dataSet) {
            masterGrid.DataSource = dataSet;
            masterGrid.DataMember = "MasterTable";
            detailGrid.DataSource = dataSet;
            detailGrid.DataMember = "MasterTable.Relation"; 
        }
        DataSet CreateData(int numMaster, int numDetail) {
            DataSet dataSet = new DataSet("TestData");
            DataTable masterTable = dataSet.Tables.Add("MasterTable");
            DataTable detailTable = dataSet.Tables.Add("DetailTable");
            //
            DataColumn colID = masterTable.Columns.Add("ID", typeof(int));
            DataColumn colName = masterTable.Columns.Add("Name", typeof(string));
            //
            DataColumn colID1 = detailTable.Columns.Add("ID", typeof(int));
            DataColumn colMasterID = detailTable.Columns.Add("MasterID", typeof(int));
            DataColumn colName1 = detailTable.Columns.Add("Name", typeof(string));
            //
            dataSet.Relations.Add("Relation", colID, colMasterID, true);
            //
            GenerateData(numMaster, numDetail, masterTable, detailTable);
            return dataSet;
        }
        void GenerateData(int numMaster, int numDetail, DataTable masterTable, DataTable detailTable) {
            for(int masterId = 0; masterId < numMaster; masterId++) {
                masterTable.Rows.Add(masterId, "MasterRecord" + masterId.ToString());
                for(int i = 0; i < numDetail; i++) {
                    int detailId = masterId * 100 + i;
                    detailTable.Rows.Add(detailId, masterId, "DetailRecord" + detailId.ToString());
                }
            }
        }
    }
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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