5

我正在用我的数据库中的结果填充我的 System.Windows.Forms.ListView,如下所示:

foreach (DataRow row in theTable.Rows)
{
    ...build item from row..

    myListView.Items.Add(item);
}

然后我想以与从数据库返回的行不同的顺序对列表视图进行排序,所以我打电话

myListView.Sort();

但是当我想去选择列表视图中的顶部项目时,它不起作用,它选择了顶部项目以外的东西:

myListView.Items[0].Selected = true;

这是有道理的,因为 Items 集合是按照在 foreach 循环中迭代的表中的行的顺序添加的。

使用 myListView.TopItem.Seleted = true 也不起作用。

那么我如何在排序后选择列表视图中最顶层的项目呢?

感谢您的任何回答。

4

2 回答 2

5

您确定当前选择了列表视图吗?如果它没有被选中,您将看不到被选中的项目。

以下代码似乎正在工作:

    private void Populate(object sender, EventArgs e)
    {   
        listView1.Items.Add("D");
        listView1.Items.Add("B");
        listView1.Items.Add("A");
        listView1.Items.Add("C");
    }

    private void SelectFirst(object sender, EventArgs e)
    {
        listView1.Items[0].Selected = true;
        listView1.Select();
    }

    private void SortAndSelect(object sender, EventArgs e)
    {
        listView1.Sorting = SortOrder.Ascending;
        listView1.Sort();

        listView1.Items[0].Selected = true;
        listView1.Select();
    }

注意 listView1.Select()

于 2012-11-08T22:47:40.433 回答
1

您可能已将 HideSelection 设置为 true。让它假,然后尝试。

myListView.HideSelection = false;

此外,列表视图可以有一个选定的项目,但不关注其他项目。所以最好同时设置焦点和选择:

if (myListView.Items.Count > 0)
{
    myListView.Items[0].Selected = true;
    myListView.Items[0].Focused = true;
}

如果这不起作用,您可以将焦点设置到列表视图本身,以查看选择是否落在正确的项目上。

于 2012-11-08T22:49:29.440 回答