Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Фильтр по DataTable


Автор: Banderos 6.5.2011, 15:23
Добрый день всем.

Вопрос вот в чем:

есть у меня DataSet, в него я загрузил из БД необходимые таблицы-справочники, создав для каждой соответственно свой DataTable.
Так вот теперь нужно, когда в 1 КомбоБоксе выбирается значение во 2-й КомбоБокс подгружаются данные из DataTable, соответствующие выбранному значению.
Можно ли как то на DataTable наложить что то типо условия выборки??? Чтобы когда я этот DataTable сделаю источником данных для КомбоБокс_2 там были не все значения, а только те, параметр выбора которых, был выбран в КомбоБокс_1.

Заранее спасибо.

Автор: -Mikle- 6.5.2011, 15:37
Можно. Для этого создайте в вашем DataSet соответствующий Relation, а во втором комбо боксе пропишите в качестве источникаэтот релейшн, а не таблицу. Если я ничего не напутал (уже давненько не связывался с DataSet'ами), то эта связка именно так и работает.

Автор: Banderos 10.5.2011, 14:57
-Mikle-, что то я попробовал вот так:

табл. А 
id
value

табл. Б
id
value
id_A

делаю:
Код

DataRelation DR = new DataRelation("Имя_связи", DataSet.Tables["A"].Columns["id"], DataSet.Tables["B"].Columns["id_A"]);
DataSet.Relations.Add(DR);


не работает, в чем прикол? 
(или я что-то неверно делаю)

Заранее спасибо!

Автор: jonie 10.5.2011, 15:58
тут я даже видео выкладывал http://forum.vingrad.ru/forum/topic-302591.html

Автор: Banderos 10.5.2011, 16:06
jonie, спасибо, познавательное видео.
Только я привык все делать вручную, без участия мастера, потому что потом появляются невероятные глюки в самых неожиданных местах.

Автор: -Mikle- 10.5.2011, 20:37
Вот пример:
Код

        public Form1()
        {
            InitializeComponent();

            DataSet dataSet = new DataSet();

            DataTable tableA = dataSet.Tables.Add("A");
            DataColumn colA_Id = tableA.Columns.Add("ID", typeof(int));
            colA_Id.AllowDBNull = false;
            tableA.Columns.Add("Name", typeof(string));

            DataTable tableB = dataSet.Tables.Add("B");
            DataColumn colB_Id = tableB.Columns.Add("ID", typeof(int));
            colB_Id.AutoIncrement = true;
            colB_Id.AllowDBNull = false;
            DataColumn colB_AId = tableB.Columns.Add("AID", typeof(int));
            colB_AId.AllowDBNull = false;
            tableB.Columns.Add("Name", typeof(string));

            tableA.Rows.Add(1, "str1");
            tableA.Rows.Add(2, "str2");
            tableA.Rows.Add(3, "str3");

            tableB.Rows.Add(null, 1, "str1-1");
            tableB.Rows.Add(null, 1, "str1-2");
            tableB.Rows.Add(null, 1, "str1-3");
            tableB.Rows.Add(null, 2, "str2-1");
            tableB.Rows.Add(null, 2, "str2-2");
            tableB.Rows.Add(null, 3, "str3-1");

            dataSet.Relations.Add("A2B", colA_Id, colB_AId);

            // вариант 1
            BindingSource sourceTableA = new BindingSource();
            sourceTableA.DataSource = dataSet;
            sourceTableA.DataMember = "A";

            BindingSource sourceChild = new BindingSource();
            sourceChild.DataSource = sourceTableA;
            sourceChild.DataMember = "A2B";

            dataGridView1.DataSource = sourceTableA;
            dataGridView2.DataSource = sourceChild;
            // вариант 1 //

            // вариант 2 (без BindingSource)
            // dataGridView1.DataSource = tableA.DefaultView;
            // dataGridView2.DataSource = tableA.DefaultView;
            // dataGridView2.DataMember = "A2B";
            // вариант 2 //
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)