Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > связь между двумя коллекциями в DataGrid


Автор: Demokratizator 30.4.2009, 09:32
Добрый день.
Как в контроле DataGrid сделать связь между двумя коллекциями, если члены одной коллекции содержат представителя другой (чтобы появился "+" в родительской строке)?
что-то наподобие:
Код

public class G1
{
public G1(string t)
{ _name = t; }
private string _name;
public string name
{
get { return _name;}
set { _name = value;}
}
private G2Collection _g2c;
public G2Collection g2c
{
get { return _g2c;}
set { _g2c = value; }
}
}
public class G2
{
public G2(string t)
{ _name = t; }
private string _name;
public string name
{
get { return _name; }
set { _name = value; }
}
}
public class G1Collection : CollectionBase, IBindingList
{........}
public class G2Collection : CollectionBase, IBindingList
{........}
// тут "заполняем" DataGrid
G1Collection g1c = new G1Collection();
G1 gg1 = new G1("qwertyG1");
gg1.g2c = new G2Collection();
G2 gg2 = new G2("qwertyG2");
gg1.g2c.Add(gg2);
g1c.Add(gg1);
DataGrid1.DataSource = g1c;

DataGrid содержит две DataGridTableStyle:
1. MappingName = "G1Collection";
2. MappingName = "G2Collection";
В результате в DataGrid отображается только колонка с полем name класса G1.
если первому DataGridTableStyle свойство MappingName изменить на что-ниб другое, отличное от "G1Collection", то появляется этот "+",
но получается, что стиль родительской таблицы (G1Collection) строится "по дефолту" — т.е. названия колонок будут именоваться именами членов класса G1..
Как реализовать 1 вариант??
Или если делать все через DataSet с несколькими таблицами и связями между ними, то как сделать 1 (родительскую таблицу) - только ReadOnly?
Спасибо!

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