2016-08-09 8 views
0

Я использую C# Windows Forms и базу данных codefirst (Visual Studio 2013 Ultimate).Как отобразить список внутри другого списка в Winfoms DataRepeater

Возможно ли отобразить список внутри другого списка в Windows Forms? (Акцент делается на -displaying-данных).

Пожалуйста, смотрите этот проект в качестве примера: https://postimg.cc/image/inunj8pxh/

Я обычно отображается список с powerpacks' DataRepeater. Например, когда заказ размещается клиентом, я могу отобразить orderId, customerEmail, customerName и т. Д. В списке заказов.

Однако каждый заказ включает в себя множество разных предметов. До сих пор я не мог отображать какие-либо элементы дочернего списка (элементов) внутри каждого элемента datarepeater, где отображается родительский список (заказы). Внешним ключом каждого элемента является orderId, а внешний ключ заказа - это список элементов (порядок отношений ... - 1..n).

+1

Изображение поможет понять то, что вы ищете. Также: ваш выбор тегов кажется несколько запутанным. Treeviews содержат вложенные списки. Помимо этого вам нужно самому закодировать его. Вот закодированный [аккордеонный пример] (http://stackoverflow.com/questions/29005397/accordion-in-windows-forms-datagridview/29006361?s=1|0.4533#29006361) – TaW

+0

Я быстро создал новый проект, потому что мой настоящий проект содержит конфиденциальные данные. Пожалуйста, проверьте это изображение, чтобы получить полный обзор моего проекта и мою визуализированную цель. https://postimg.org/image/inunj8pxh/ –

+0

Хм, это похоже на то, что вы должны идти на вложенные потоковые панели и пользовательские элементы управления. Вы все еще можете использовать механизм активации/расширения, как в примере с аккордеон, но он не " t выглядят как жесткая сетка строк; поэтому DGV, похоже, не требуется. Если вам это нужно, не забудьте задуматься о привязке данных при выполнении макета. – TaW

ответ

0

Я нашел решение! Мне потребовалось некоторое время, чтобы выяснить, как получить контроль над элементами данных. Читая во многих других форумах и учебниках, я постепенно пробивался. Найти на скриншоте мой полный проект: http://i.stack.imgur.com/jFa7G.png

Любые улучшения в коде более чем приветствуются. Поскольку я совершенно новичок во всем мире программирования, мой код не может быть оптимизирован, и использование словаря иногда может быть неточным.

Здесь вы найдете код моего Form1:

 
namespace list_inside_list 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private void Form1_Load(object sender, EventArgs e) 
     {

} protected override void OnLoad(EventArgs e) { //First we load the list of Orders to datarepeater1 Program.CompanyContext _context = new Program.CompanyContext(); List<list_inside_list.Program.Order> listOrders = _context.Order.ToList(); program_OrderBindingSource1.DataSource = listOrders; //I don´t know why, but we need to load the list of items as well, although we never use the listItems variable List<list_inside_list.Program.Item> listItems = _context.Item.ToList(); /* * 1. We will loop through all the datarepater1 items (which is fed with listOrders) * 2. We assign currItem as datarepeater1.CurrentItem in order to "select" the current item at index j, * although we will never user currItem * 3. We tell the program that of the current datarepeater item we want use the current Order object * 4. We go through each of the currentOrder.items and print the itemName * */ DataRepeaterItem currItem = new DataRepeaterItem(); for (int j = 0; j < this.dataRepeater1.ItemCount; j++) { this.dataRepeater1.CurrentItemIndex = j; currItem = dataRepeater1.CurrentItem; var currentOrder = (list_inside_list.Program.Order)program_OrderBindingSource1.Current; foreach (var item in currentOrder.items) { dataRepeater1.CurrentItem.Controls["richTextBox1"].Text = dataRepeater1.CurrentItem.Controls["richTextBox1"].Text + item.itemName + "\n"; } } } }

}