Существует 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
Как программно обновить дочерний список ⇐ C#
Место общения программистов C#
1735228106
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; }
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79309845/how-to-refresh-child-listview-programatically[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия