我有一個ListView顯示多行ListViewItems。用戶可以通過點擊「編輯」後打開的對話框編輯這些項目中的一個。當對話框關閉時,我想修改所選的ListViewItem,使其反映新的設置。如何更新ListView的選定項目?
這裏是我當前如何更新我的項目:由於我需要在多個地方碰代碼
private void btnEditSnmpV3Setting_Click(object sender, EventArgs e)
{
if (lstVwSNMPv3Settings.SelectedItems.Count > 0)
{
ListViewItem selectedItem = lstVwSNMPv3Settings.SelectedItems[0];
NetworkDiscoverySnmpSetting settings = (NetworkDiscoverySnmpSetting)selectedItem.Tag;
NetworkDiscoverySnmpV3SettingsDialog dialog = new NetworkDiscoverySnmpV3SettingsDialog(settings);
//Pass in the owner for centering of dialog.
if (dialog.ShowDialog(this) == DialogResult.OK)
{
selectedItem.SubItems.Clear();
selectedItem.Text = settings.SnmpV3Username;
selectedItem.SubItems.Add(settings.SecurityMode.ToString());
selectedItem.SubItems.Add(settings.AuthenticationProtocol.ToString());
selectedItem.SubItems.Add(settings.PrivacyProtocol.ToString());
selectedItem.Tag = settings;
}
}
}
我發現這是一個糟糕的解決方案,如果列改變我的ListView的數量。
我的「添加」事件期間處理此碼再使用問題通過給NetworkDiscoverySnmpSetting
一個實用方法(而不是「編輯」):
public ListViewItem ToListViewItem()
{
ListViewItem listViewItem = new ListViewItem();
listViewItem.Text = SnmpV3Username;
listViewItem.SubItems.Add(SecurityMode.ToString());
listViewItem.SubItems.Add(AuthenticationProtocol.ToString());
listViewItem.SubItems.Add(PrivacyProtocol.ToString());
listViewItem.Tag = this;
return listViewItem;
}
其用於像這樣:
private void btnAddSnmpV3Setting_Click(object sender, EventArgs e)
{
NetworkDiscoverySnmpSetting settings = new NetworkDiscoverySnmpSetting(NetworkDiscovery.ID);
NetworkDiscoverySnmpV3SettingsDialog dialog = new NetworkDiscoverySnmpV3SettingsDialog(settings);
//Pass in the owner for centering of dialog.
if (dialog.ShowDialog(this) == DialogResult.OK)
lstVwSNMPv3Settings.Items.Add(settings.ToListViewItem());
}
不幸的是,ListView.SelectedItems不允許收集修改。因此,這並不編譯:
lstVwSNMPv3Settings.SelectedItems[0] = settings.ToListViewItem();
我應該如何改變我的第一個代碼段,這樣我就不需要更新我在多個地方的代碼時ListView的列改變?
做你自己一個巨大的忙,谷歌和了解ObjectListView。簡而言之,這真是太棒了。 – banging