2016-08-09 7 views
0

C# Windows Forms 및 codefirst 데이터베이스 (Visual Studio 2013 Ultimate)를 사용하고 있습니다.Winfoms DataRepeater에서 다른 목록 안에 목록을 표시하는 방법

Windows Forms에서 다른 목록 안에 목록을 표시 할 수 있습니까? (강조는 데이터를 표시하는 것입니다).

것은 예를 들어이 프로젝트를 참조하십시오 https://postimg.cc/image/inunj8pxh/

나는 보통 powerpacks'입니다 DataRepeater와 목록을 표시합니다. 예를 들어 고객이 주문을하면 주문 목록의 orderId, customerEmail, customerName 등을 표시 할 수 있습니다.

그러나 각 주문에는 여러 항목이 포함됩니다. 지금까지, 부모 목록 (주문)이 표시된 datarepeater 각 요소 내부에있는 하위 목록 (항목)의 요소를 표시 할 수 없습니다. 각 항목의 외래 키는 orderId이며 주문의 외래 키는 항목 목록입니다 (관계 주문 ... 항목은 1..n입니다).

+1

. 또한 태그 선택은 다소 혼란스러워 보입니다. Treeviews에는 중첩 목록이 들어 있습니다. 그 외에는 코드를 직접 작성해야합니다. 다음은 코딩 된 [아코디언 예제]입니다. (http://stackoverflow.com/questions/29005397/accordions-29005397/accordion-in-windows-forms-datagridview/29006361?s=1|0.4533#29006361) – TaW

+0

신속하게 새 프로젝트를 만들었습니다. 제 실제 프로젝트에는 민감한 데이터가 포함되어 있습니다. 내 프로젝트와 시각화 된 목표의 전체 개요를 보려면이 이미지를 확인하십시오. https://postimg.org/image/inunj8pxh/ –

+0

흠,이 중첩 된 flowlayoutpanels 및 usercontrols 위해 가야한다 것처럼 lokks .. 당신은 여전히 ​​아코디언 예제 에서처럼 활성화/확장 메커니즘을 사용할 수 있지만 원하는 경우 ' 행이 꽉 찬 모양 같아 보이지 않는다. 그래서 DGV가 필요하지 않은 것처럼 보입니다. 필요할 경우 레이아웃을 수행 할 때 데이터 바인딩에 대해 미리 생각하는 것을 잊지 마십시오. – TaW

답변

0

해결책을 찾았습니다! datarepeater 항목을 제어하는 ​​방법을 알아내는 데는 시간이 걸렸습니다. 다른 많은 포럼과 튜토리얼을 읽으면서 점차적으로 나아갔습니다. 스크린 샷 내 전체 프로젝트 찾기 : 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"; } } } }

}