0

我正在尝试获取刚刚检查的列表视图项目的索引,并根据刚刚检查的项目更新数据库,而不考虑在尝试使用复选框指示用户需要通知之前检查的其他项目与否,所以当用户选中复选框时,我想使用项目的索引并将该项目的通知设置为 true,但我只能一次获取所有已检查项目的索引。

请提供任何帮助。

我能够调用 itemcheck 事件函数,但它认为最初检查的项目以及用户检查的项目。我设法使用布尔函数“Item_checked by user”将最初检查的项目分开

 ` private static bool checked_by_user;
    private void courseworks_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (checked_by_user == true)
        { //do something
        }
        else ;//do nothing

    }`

现在,我希望能够仅获取刚刚检查的行的 bar_ref_id,我的列表视图是从数据库创建的,如下所示

foreach (var item2 in CW_query2)//for each CW
            {
                if (item.Status == true)
                {
                    ListViewItem items = new ListViewItem(new[] {//adds items into list view, per column
                    item2.Module_Code, item2.Title, item2.Due_Date.ToString("dd/MM/yy"),"Submitted",item.Bar_Ref_ID
                });
                    courseworks.Items.Add(items);
                }
                else
                {
                    ListViewItem items = new ListViewItem(new[] {//adds items into list view, per column
                    item2.Module_Code, item2.Title, item2.Due_Date.ToString("dd/MM/yy"),"Not-Submitted",item.Bar_Ref_ID
                });
                    courseworks.Items.Add(items);

                }

我希望我添加的信息有所帮助。提前致谢

4

1 回答 1

0

如果您已经从数据库中获取订阅并根据用户的订阅为每个项目设置 Checked 属性,那么使用复选框的 CheckedChanged 事件不是最简单的吗?很难说出您的实现可能是什么,但是您应该能够在未选中框(删除订阅)时使用一个功能,在选中框时使用另一个功能(添加订阅)。

如果您能够提供一些代码,我可能会更具体。

更详细

在您的 ItemChecked 事件中,.NET 将object senderItemCheckEventArgs e作为事件的参数公开。在该函数中,您可以查看sender获取已选中/未选中的 ListViewItem,并且您可以查看在eListView 中检索该项目的索引(以防您可以使用索引轻松更改数据库中的数据)。这是一个简短的例子,我几乎要直接从微软那里偷来:

private void ListView1_ItemCheck1(object sender, ItemCheckEventArgs e)
{
    ListViewItem item = (ListViewItem)sender

    if (e.CurrentValue==CheckState.Unchecked)
    {
        Unsubscribe(e.Index, currentUserID);
          /*You can pass the Index of the ListViewItem that caused the event
          to a method that will update your database (I would find it easier
          to program a function that takes the current user's ID as a parameter)*/

        Unsubscribe(item.Name, currentUserID);
          /*OR this might be a better way for you to reference what subscription
          should be cancelled (again, in addition to a UserID)*/
    }
    else if((e.CurrentValue==CheckState.Checked))
    {
        Subscribe(e.Index, currentUserID);
    }
}

private void Unsubscribe(int index, int userID)
{
    //unsubscribe the referenced userID from the subscription at index
}

private void Unsubscribe(string subscriptionName, int userID)
{
    //unsubscribe the referenced userID from the subscription called subscriptionName
}

我无法为您的第二段代码提供更具体的示例,因为我不太确定它在做什么。看起来您可能正在做一些比上面的代码示例可以处理的更复杂的事情,但也许代码会帮助您。

于 2014-03-23T10:35:27.317 回答