列表视图中的选定行保留选定的索引

时间:2013-11-14 03:11:58

标签: c# listview

我正在尝试制作访客日志。我有一个ListView,其中包含访问者列表。

如果您选择一个访问者并单击一个按钮,它将通过更新数据库中指示他们已注销的字段从列表中删除它们,然后刷新列表以仅显示没有勾选该字段的访问者。

if (lsvVisitors.SelectedItems.Count > 0)
{
    if (MessageBox.Show(string.Join(Environment.NewLine, "Do you wish to sign-out " 
        + lsvVisitors.SelectedItems[0].SubItems[0].Text + " " 
        + lsvVisitors.SelectedItems[0].SubItems[1].Text),
        "Confirm", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) 
            == System.Windows.Forms.DialogResult.OK)
    {
        var entry = _repository.GetLogbookEntryById((LogbookEntry)lsvVisitors.SelectedItems[0].Tag);
        _repository.SignOutLogbookEntry(entry);
        UpdateList();
    }   
}
else
{
    MessageBox.Show(string.Join(Environment.NewLine,
        "You need to select a Visitor to sign-out"), 
        "Warning", 
        MessageBoxButtons.OK, 
        MessageBoxIcon.Warning);
}

我的问题是,当用户点击了在列表中未选择任何人的注销按钮时,我必须检查所选项目的数量是否>如果它没有通过此检查,我会告诉用户选择列表中的某个人。现在,如果用户选择某人,然后从列表视图中移除焦点,并且看起来未选择访问者,则所选项目仍显示为列表中选择的最后一个人。

当焦点离开框时,我无法重置此功能,因为他们无法使用注销按钮注销用户。

我在问,如果列表视图中不再明显选择该项目,如何为listview重置selecteditems.count?

1 个答案:

答案 0 :(得分:0)

由于 Ashes999 问,这是一个例子:zip with solution and demo

这是基于我为代码项目编写的这篇文章:Selected value, index and more

我在底部添加了一个文本框,并连接OnFocus事件以将列表框选择的索引设置为-1。这样,您可以更改焦点以将所选索引重置为所需对象的-1,并将其保留为提交按钮。

如果你想跳过演示(真的很遗憾,但嘿,谁知道......),这是XAML:

 <TextBox Text="Click here to remove index"  GotFocus="TextBox_GotFocus"  />

这是背后的代码:

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    this.SourceListBox.SelectedIndex = -1;
}

(注意,您需要一个名为ListBox的{​​{1}},或者相应地重命名它。