【问题标题】:C# WPF DataGrid change Column Index by Position of HeaderC# WPF DataGrid 按标题位置更改列索引
【发布时间】:2013-07-31 08:48:54
【问题描述】:

我有一个 C# WPF 应用程序,我在其中使用 DataTable 作为 DataGrid 的源。

现在当用户在 DataGrid 中移动一个列时(我已经找到了一个 ColumnReordered 事件) 我想将 Column 的索引更改为 Position, 用户将其移动到(第一个位置为 0,第二个位置为 1...)

我想这样做是因为我想在用户下次运行应用程序时保存列位置。

有没有办法做到这一点?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    您需要做的就是每当用户即将关闭表单时,您会获取列名及其各自的索引,并将其保存为任何格式,例如 xml、csv。下次用户加载时,您可以在从文件中读取他最后指定的设置后应用重新排序。

    你可以看看这篇文章我的意思。这实现了相同的想法。不过,您可以为您的 WPF 应用程序修改它。

    http://www.codeproject.com/Articles/37087/DataGridView-that-Saves-Column-Order-Width-and-Vis

    【讨论】:

    • 这听起来很有帮助,但不幸的是 WPF 并不知道许多 dataGrid 属性,例如 DisplayIndex
    • @LPL 我在回答中提到它适用于winforms。你需要为 wpf 修改它
    • 令人惊讶的是,DisplayIndex 现在可以正常工作。我敢肯定,当我想早点使用它时,它不适用于 Wpf:D
    • @ninzide 可以像这样获取显示索引 dataGrid.Columns[i].DisplayIndex
    【解决方案2】:

    使用 ColumnIndex

     int columnIndex = dataGridView.CurrentCell.ColumnIndex;
    

    这里已经发布的帖子应该会有所帮助;

    Get current cell column index in DataGridView CurrentCellChanged Event

    【讨论】:

    • 是 .SelectedIndex();给我它之前的索引,即使它在另一个位置?如果是这样,我怎样才能知道它现在在哪个位置?
    • SelectedIndex();将为您提供当前选择的索引。因此,如果您想要上一个项目索引,那么您需要在移动到下一个之前存储它。我确定您可以使用火灾事件,甚至索引已更改。但正如 LPL 指出的那样,您在列索引而不是行索引之后。我已经更新了我的专栏答案。
    猜你喜欢
    • 2011-12-16
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多