Как программно обновить дочерний списокC#

Место общения программистов C#
Ответить
Anonymous
 Как программно обновить дочерний список

Сообщение Anonymous »

Существует 2 списка. Родительский и дочерний список.
при нажатии на родительский элемент необходимо обновить дочерний список. Это не работает в образце.
При щелчке по элементу списка родительского элемента в дочернем элементе ничего не меняется. данные заполняются, но не обновляются визуально

// code is uploaded in https://share.linqpad.net/9qrb7wje.linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

void Main()
{
// Sample Data (replace with your database queries)
var table1 = new List
{
new ParentRow { ParentID = 1, ParentName = "Parent 1" },
new ParentRow { ParentID = 2, ParentName = "Parent 2" },
new ParentRow { ParentID = 3, ParentName = "Parent 3" }
};

var table2 = new List
{
new ChildRow { ChildID = 1, ParentID = 1, ChildName = "Child 1.1" },
new ChildRow { ChildID = 2, ParentID = 1, ChildName = "Child 1.2" },
new ChildRow { ChildID = 3, ParentID = 2, ChildName = "Child 2.1" }
};

// Create Windows Forms
var form = new Form { Text = "Drill Through Example", Width = 800, Height = 600 };

// Table 1 ListView (Parent Table)
var listView1 = new ListView { View = View.Details, Dock = DockStyle.Left, Width = 300 };
listView1.Columns.Add("ParentID", 80);
listView1.Columns.Add("ParentName", 200);

foreach (var row in table1)
{
var item = new ListViewItem(row.ParentID.ToString());
item.SubItems.Add(row.ParentName);
item.Tag = row.ParentID; // Store ParentID in Tag for reference
listView1.Items.Add(item);
}

// Table 2 ListView (Child Table)
var listView2 = new ListView { View = View.Details, Dock = DockStyle.Fill };
listView2.Columns.Add("ChildID", 80);
listView2.Columns.Add("ChildName", 200);

// Event to Handle Drill Through
listView1.SelectedIndexChanged += (sender, args) =>
{
if (listView1.SelectedItems.Count > 0) // Ensure an item is selected
{
var selectedParentID = (int)listView1.SelectedItems[0].Tag; // Retrieve ParentID from Tag
var childRows = table2.Where(c => c.ParentID == selectedParentID).ToList(); // Filter child rows

// Clear and update child ListView
listView2.BeginUpdate(); // Pause UI updates for performance
listView2.Items.Clear();
foreach (var child in childRows)
{
var item = new ListViewItem(child.ChildID.ToString());
item.SubItems.Add(child.ChildName);
listView2.Items.Add(item);
}
listView2.EndUpdate(); // Resume UI updates
listView2.Refresh(); // Force visual refresh
}
};

// Add Controls to Form
form.Controls.Add(listView1);
form.Controls.Add(listView2);

// Show Form
form.ShowDialog();
}

// Define Classes for Parent and Child Rows
public class ParentRow
{
public int ParentID { get; set; }
public string ParentName { get; set; }
}

public class ChildRow
{
public int ChildID { get; set; }
public int ParentID { get; set; }
public string ChildName { get; set; }
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... amatically
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»