【发布时间】:2020-11-23 13:43:45
【问题描述】:
我有一个 listboxnamed (lstClass) 填充了数据库项目。我想更改位于listbox 之外的名为 (cbSelectAll) 的checkbox 的状态。我希望这些点在代码中实现,
- 加载表单时,复选框应设置为
false。 - 当我从列表框中选择多个项目(未完成项目)时,复选框状态应更改为
Intermediate。 - 当我从列表框中选择完整的项目时,复选框状态应更改为
True。 - 当我单击复选框时,如果其状态为
true,则列表框中应选择所有项。 - 当我点击复选框时,如果它的状态是
false那么no项应该在列表框中被选中。
表格代码如下:-
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);
}
}
}
【问题讨论】:
标签: c# winforms checkbox listbox