Introduction
I had the need to personalize a ListView
frequently. As always, The Code Project was my first port of call. Like most good/lazy developers, I'd rather reuse than write from scratch unless I really have to. I found many articles which came close but never quite hit the mark. So I took Guy Baseke's article: Save ListView Settings and modified it to what I needed. I've also tried to include some best practices in the small library I've produced so that people who are not familiar with some of the community tools have a working example that they can refer to.
Background
My biggest problem with the original sample is that it saved the settings to the registry. While this may be common practice, it does require write privileges for the registry which are frequently not available to all users. So it provided me with the perfect opportunity to read up on isolated storage which does not require elevated privileges.
Using the Code
Using the library is trivial. Simply populate your ListView
in the most appropriate manner. You'll probably need an instance level ListViewPersonalisationManager
variable to track the changes for before and after your personalization.
InitializeComponent();
Guid id = new Guid("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}");
manager = new ListViewPersonalisationManager(listView1, id);
Before displaying the personalization dialog, it is important to synchronize the ListView
with the manager in case any columns have been moved or resized.
private void OnSettings(object sender, System.EventArgs e)
{
manager.SyncWithListView();
ColumnSettingsUI dialog = new ColumnSettingsUI(manager.ColumnDetails);
if ( dialog.ShowDialog() == DialogResult.OK)
manager.UpdateListView(dialog.ColumnDetails);
}
To persist the settings to disk:
manager.SaveSettings(true);
Points of Interest
Technology areas covered:
- Isolated storage
- Serialization
- NUnit
- NCover
- NAnt
- NDoc
- FxCop
History
- 30th July, 2007: Initial post
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.