繁体   English   中英

C# Listview 中的选中项

[英]Checked items in C# Listview

我在 C# 应用程序中有一个 Listview 控件,其中填充了一些名称和复选框以选择一个或多个值。 除了点击复选框,用户还可以点击名称,它会变成蓝色。 我想保留此功能,因为单击名称会显示更多数据,然后单击复选框将其标记为进一步处理

我相信单击复选框会更改 Item.Checked 属性并单击名称 Changes Item.Selected 但它似乎没有那么简单。

我有一个计算检查项目的代码:

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();
        }


    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM