У меня есть список в следующем формате:
List<Amortizacion> lista = new List<Amortizacion>
{
new Amortizacion {Fecha=Convert.ToDateTime("20/01/2012"), Idbanco=1, Nbanco="Bancomer", Idgrupo=1, Ngrupo="Jorge", Npersona="Jorge", Monto=500m},
new Amortizacion {Fecha=Convert.ToDateTime("20/01/2012"), Idbanco=2, Nbanco="Afirme", Idgrupo=2, Ngrupo="CreaB", Npersona="Noe", Monto=200m},
new Amortizacion {Fecha=Convert.ToDateTime("20/01/2012"), Idbanco=2, Nbanco="Afirme", Idgrupo=2, Ngrupo="CreaB", Npersona="Julio", Monto=250m},
new Amortizacion {Fecha=Convert.ToDateTime("20/01/2012"), Idbanco=2, Nbanco="Afirme", Idgrupo=2, Ngrupo="CreaB", Npersona="Marcela", Monto=300m},
new Amortizacion {Fecha=Convert.ToDateTime("21/01/2012"), Idbanco=1, Nbanco="Bancomer", Idgrupo=3, Ngrupo="Pedro", Npersona="Pedro", Monto=150m},
new Amortizacion {Fecha=Convert.ToDateTime("21/01/2012"), Idbanco=1, Nbanco="Bancomer", Idgrupo=4, Ngrupo="CBI", Npersona="Juan", Monto=400m},
new Amortizacion {Fecha=Convert.ToDateTime("21/01/2012"), Idbanco=1, Nbanco="Bancomer", Idgrupo=4, Ngrupo="CBI", Npersona="Manuel", Monto=450m},
new Amortizacion {Fecha=Convert.ToDateTime("22/01/2012"), Idbanco=2, Nbanco="Afirme", Idgrupo=5, Ngrupo="Pepe", Npersona="Pepe", Monto=300m},
};
И я определил свой класс следующим образом:
class Amortizacion
{
public DateTime Fecha { get; set; }
public int Idgrupo { get; set; }
public string Ngrupo { get; set; }
public int Idbanco { get; set; }
public string Nbanco { get; set; }
public string Npersona { get; set; }
public decimal Monto { get; set; }
}
И я хочу создать вложенный групповой элемент для отображения его вдревовидное управление.Сначала мне нужно сгруппироваться по Фече, затем по Идбанко и, наконец, по Идгрупо.Результат, который я ищу, выглядит примерно так:
- 20/01/2012 (4) acreditados
- Bancomer
- Подтверждение
- CreaB 750
- Ное 200
- Хулио 250
- Марсела 300
- 21/01/2012 (3) acreditados
- 22/01/2012 (1) acreditados
Обратите внимание, что в узлах 'Fecha' число в скобках - это количество полей, сгруппированных по:и в узлах 'Idgrupo' отображаемая сумма представляет собой сумму отдельных 'Monto'.
Я до сих пор кодировал
var gpoFecha = lista.GroupBy(g => g.Fecha);
int ifecha = 0;
foreach (var fecha in gpoFecha)
{
TreeNode nodoFecha = new TreeNode(fecha.Key.ToString());
treeAm.Nodes.Add(nodoFecha);
var gpoBanco = fecha.GroupBy(gp => gp.Idbanco);
foreach (var banco in gpoBanco)
{
int ibanco = 0;
TreeNode nodoBanco = new TreeNode(banco.Key.ToString());
treeAm.Nodes[ifecha].Nodes.Add(nodoBanco);
var gpoGrpo = banco.GroupBy(gpo => gpo.Idgrupo);
foreach (var cred in gpoGrpo)
{
TreeNode nodoCred = new TreeNode(cred.Key.ToString());
treeAm.Nodes[ifecha].Nodes[ibanco].Nodes.Add(nodoCred);
}
ibanco++;
}
ifecha++;
}
Проблема в том, что мой код не работает, как ожидалось,Другая проблема состоит в том, что я не знаю, как показать в своем узле дерева не только ключ, но и строку, которая определяет этот ключ (я имею в виду, что IdBanco = 1 должен показывать Nbanco = "Bancomer", как я показываю выше.).
Еще один интересный вопрос: это самый эффективный способ сделать это?Спасибо