У меня возникли проблемы при попытке сделать CheckedListBox
элементов. В этой программе я загружаю элементы из DataTable
в CheckedListBox
, он работает в первый раз, но после указания фильтра CheckedListBox
забывает обо всех проверенных элементах. Итак, вопрос в том, как заставить его запомнить отмеченные предметы после того, как они были применены?Сделать CheckedListBox Запомнить CheckedItems after Filter
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace AppNumber302
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dt = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("checked");
dt.Rows.Add(10, "azer1", true);
dt.Rows.Add(10, "azer2", true);
dt.Rows.Add(10, "azer3", false);
dt.Rows.Add(10, "azer4", false);
checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "name";
checkedListBox1.ValueMember = "id";
PerformCheck();
}
private void PerformCheck()
{
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow drv = dt.Rows[i];
bool stat = bool.Parse(drv[2].ToString());
checkedListBox1.SetItemChecked(i, stat);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
DataRow[] dr = dt.Select("name LIKE '%" + textBox1.Text + "%'");
DataTable tmp = dr.CopyToDataTable();
checkedListBox1.DataSource = tmp;
checkedListBox1.ValueMember = "id";
checkedListBox1.DisplayMember = "name";
}
catch
{
checkedListBox1.DataSource = new DataTable();
}
}
}
}
даже называя его снова, после проверки или unckecking, 'CheckedListBox' забывает проверенные/unckecked элементов. –
Ах. Попросите CheckCheck принять данные в качестве параметра и передать в dt в Load и передать tmp в TextChanged. Хорошая причина не использовать переменные класса в частных методах. –