У меня есть 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 столбцов изменены.
я обращался этот вопрос кода многократного использования во время мероприятия «Добавить» (в отличие от «Edit»), давая 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 меняются?
Сделайте ОГРОМНУЮ пользу и Google и узнайте о ObjectListView. Это, в 1 слове, УДИВИТЕЛЬНО. – banging