如何在两个列表视图中同步列顺序?

时间:2009-11-25 14:57:26

标签: c# .net winforms listview

我的应用中有两个ListView,最初的列集合相同。当用户在一个列中重新排序列时,我希望重新排序另一列中的列。

我在其中一个视图的ColumnReordered事件上有以下事件处理程序,在另一个视图上有相应的处理程序:

private volatile bool reorderingColumns;

private void listView1_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
    // Prevent reentry - is this necessary?
    if (reorderingColumns)
        return;

    try
    {
        reorderingColumns = true;

        // copy display indices to the other listView
        for (int i = 0; i < columnInfo.Count; i++)
        {
            listView2.Columns[i].DisplayIndex = listView1.Columns[i].DisplayIndex;
        }
    }
    finally
    {
        reorderingColumns = false;
    }
}

但是,第二个列表视图中列的顺序保持不变。我需要做些什么才能让第二个listview以新的顺序重绘其列?

1 个答案:

答案 0 :(得分:1)

这是因为重新排序的事件在列的显示索引实际更改之前触发。这将有效:

private void listView1_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
    listView2.Columns[e.Header.Index].DisplayIndex = e.NewDisplayIndex;
}

编辑:要添加,您不需要使用此方法进行reorderingColumns检查。