已在C#列表视图中选中项目
本文关键字:项目 视图 列表 已在 | 更新日期: 2023-09-27 17:58:53
我在C#应用程序中有一个Listview控件,其中填充了一些名称和复选框来选择一个或多个值。除了点击复选框,用户还可以点击名称,它会变成蓝色。我想保留这个功能,因为点击名称会显示更多的数据,点击复选框会标记它以进一步处理
我相信点击复选框会改变项目。选中属性并点击名称会改变项目,但这似乎并不那么简单。
我有一个计数检查项目的代码:
private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
foreach(ListViewItem Item in ListView1.Items)
{
if (Item != null)
{
if (Item.Checked == true) N++;
}
}
Textbox1.Text = N.ToString();
}
当用户点击复选框时,会显示正确的数字,但当他点击名称时,即使还有更多的复选框被选中,被选中的数字也会变为1,这显然是错误的。此外,当表单和控件加载时,即使没有选中复选框,我也会得到N=1。
我做错了什么?
编辑:感谢您的快速回复和有用的提示!
我刚刚发现我的问题是我的疏忽,因为我忘记删除我的旧代码!:)起初,我使用多个选择来拾取项目,然后切换到复选框,但仍然调用SelectionChanged事件并修改文本框内容
若要获取ListView
控件中已检查项的数目,请使用ListView.CheckedItems.Count
属性。
示例:
int numCheckedItems = myListView.CheckedItems.Count;
或
TextBox1.Text = myListView.CheckedItems.Count.ToString();
您不应该遍历所有项目,因为ItemCheckedEventArgs
提供了您需要的所有信息:
private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
ListViewItem item = e.Item as ListViewItem;
if (item != null)
{
if (item.Checked)
{
N++;
}
else
{
N--;
}
}
Textbox1.Text = N.ToString();
}
private void saveButton_Click(object sender, EventArgs e)
{
SelectEmployeeBLL selectEmployeeBLL = new SelectEmployeeBLL();
int employeeId = Convert.ToInt32(employeeNameInsertComboBox.SelectedValue);
int departmentId= Convert.ToInt32(departmentNameInsertComboBox.SelectedValue);
bool departmentNameCheck = selectEmployeeBLL.DepartmentNameDuplicateCheck(departmentId, employeeId);
if (departmentNameCheck)
{
MessageBox.Show("Department already have");
return;
}
SelectEmployee selectEmployee = new SelectEmployee();
selectEmployee.DepartmentIDID = departmentId;
selectEmployee.EmployeeIDID = employeeId;
bool aselectEmployee = selectEmployeeBLL.SelectEmployeeIsert(selectEmployee);
if (aselectEmployee)
{
MessageBox.Show("save successfull");
LoadEmployeeDepartment();
}
}