我有一个listbox
名为( lstClass ),其中充满了数据库项。我想更改放置在checkbox
外部的名为{<1> cbSelectAll )的listbox
的状态。我希望这些要点在代码中实现,
false
。Intermediate
。True
。true
,则应在列表框中选择所有项。false
,则应该在列表框中选择否项。该表单的代码位于:-
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);
}
}
}
答案 0 :(得分:1)
您可以为SelectedValueChanged
处理ListBox
事件,如下所示:
private void lstClass_SelectedValueChanged(object sender, EventArgs e)
{
cbSelectAll.CheckedChanged -= cbSelectAll_CheckedChanged;
if (lstClass.SelectedItems.Count == 0)
cbSelectAll.CheckState = CheckState.Unchecked;
else if (lstClass.SelectedItems.Count == lstClass.Items.Count)
cbSelectAll.CheckState = CheckState.Checked;
else
cbSelectAll.CheckState = CheckState.Indeterminate;
cbSelectAll.CheckedChanged += cbSelectAll_CheckedChanged;
}