У меня есть listbox
named ( lstClass ), заполненный элементами базы данных. Я хочу изменить состояние checkbox
named ( cbSelectAll ), расположенного за пределами listbox
. Я хочу, чтобы эти точки были реализованы в коде,
- При загрузке формы флажок должен быть установлен на
false
. - Когда я выбираю несколько элементов (Не полные элементы) из списка , Состояние флажка следует изменить на
Intermediate
. - Когда я выбираю полные элементы из списка, состояние флажка должно быть изменено на
True
. - Когда я нажимаю флажок, если его состояние
true
, затем все элементы должны быть выбраны в ListBox. - Когда я устанавливаю флажок, если его состояние
false
, то no элементы должны быть выбраны в Listbox .
Код для формы находится под: -
public partial class frmSelectClass : Form
{
private DataTable dTable;
public frmSelectClass(DataTable table)
{
InitializeComponent();
this.dTable = table;
}
private void frmSelectClass_Load(object sender, EventArgs e)
{
Retrieving_SheetNames();
}
private void Retrieving_SheetNames()
{
List<string> lstSheets;
// Get sheet names from excel
List<string> lstSheetsEx = dTable.AsEnumerable()
.Select(r => r.Field<string>("TABLE_NAME").Trim(new char[] { '\'', '$' })).ToList();
using (var conn = new OleDbConnection(DatabaseObjects.ConnectionString))
{
using (OleDbCommand command = new OleDbCommand("select * from Classes", conn))
{
conn.Open();
DataTable dtClassDb = new DataTable();
dtClassDb.Load(command.ExecuteReader());
// Get sheet names from Access DB
List<string> lstSheetsdb = dtClassDb.AsEnumerable().Select(c => c.Field<string>("Class")).ToList();
// Order sheet names according to DB
lstSheets = lstSheetsdb.Intersect(lstSheetsEx).Union(lstSheetsEx).ToList();
}
}
lstClass.DataSource = lstSheets;
}
private void cbSelectAll_CheckedChanged(object sender, EventArgs e)
{
if (cbSelectAll.Checked)
{
for (int i = 0; i < lstClass.Items.Count; i++)
{
lstClass.SetSelected(i, true);
}
return;
}
for (int i = 0; i < lstClass.Items.Count; i++)
{
lstClass.SetSelected(i, false);
}
}
}