我的应用中有两个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以新的顺序重绘其列?
答案 0 :(得分:1)
这是因为重新排序的事件在列的显示索引实际更改之前触发。这将有效:
private void listView1_ColumnReordered(object sender, ColumnReorderedEventArgs e)
{
listView2.Columns[e.Header.Index].DisplayIndex = e.NewDisplayIndex;
}
编辑:要添加,您不需要使用此方法进行reorderingColumns
检查。