Можно ли как то реализовать checklist, что бы отображался один текст, и к нему привязана другая строка? Опишу по подробнее, начал осваивать С#. Есть задача дать пользователю список баз данных, он отмечает строки и по кнопке идет обработка отмеченных значений. Но человек работает с наименованием, а обрабатывать нужно по ИД. Пока реализовал с помощью списка на форме с наименованиями, и массивом ИД с одинаковыми индексами. Но как мне кажется, это не совсем корректно использовать, да и накладывает ограничения. В общем идеально было бы, что бы у элемента списка было представление и значение.
Создайте модель данных:
public class Item
{
public string Title { get; set; }
public string Value { get; set; }
public bool IsChecked { get; set; }
}
Title - это то, что будет позазываться пользователю (представление).
Value - значение. Тип выберите нужный вам.
IsChecked - выбран элемент или нет.
В приложении делаем привязку данных.
Контрол CheckedListBox зачем-то прячет некоторые унаследованные свойства. Получаем к ним доступ путём приведения к ListBox.
В событии ItemCheck отмечаем выбранные элемент.
При клике по свободному месту формы можно посмотреть значения выбранных элементов.
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
namespace WinFormApp1
{
public partial class Form1 : Form
{
CheckedListBox checkedListBox;
List<Item> items;
public Form1()
{
items = new List<Item>
{
new Item { Title="TitleA", Value="ValueA" },
new Item { Title="TitleB", Value="ValueB" },
new Item { Title="TitleC", Value="ValueC" },
};
checkedListBox = new CheckedListBox { Parent = this, Dock = DockStyle.Left };
var listBox = (ListBox)checkedListBox;
listBox.DataSource = items;
listBox.DisplayMember = nameof(Item.Title);
listBox.ValueMember = nameof(Item.Value);
checkedListBox.ItemCheck += CheckedListBox_ItemCheck;
this.Click += Form1_Click;
}
private void Form1_Click(object sender, EventArgs e)
{
var checkedValues = items.Where(x => x.IsChecked).Select(x => x.Value);
this.Text = string.Join(", ", checkedValues);
}
private void CheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
items[e.Index].IsChecked = e.NewValue == CheckState.Checked;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я делал блог (тестовое задание) используя MVC архитектуру и HTML тело прописал на View (show_mainphp здесь и Bootstrap, CSS, JS файлы подключены)