Переопределите элемент управления Listbox, чтобы вернуть объединенное строковое значение
Я должен переопределить класс ListBox, чтобы убедиться, что он возвращает строку csv всех выбранных элементов, а также должен принимать строку csv и заполнять список при необходимости. Допустим, у меня есть этот код. Какие функции я должен переопределить и как мне это сделать?
using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
public class ListBoxString : ListBox
{
}
}
2 ответа
Если все, что вы хотите сделать, это добавить функциональность, вы также можете добавить методы расширения, чтобы добавить эту возможность. Вот 2 быстрых примера того, как GetSelectItems для строки CSV и AddListItems из массива строк.
public static string GetSelectedItems(this ListBox lbox)
{
List<string> selectedValues = new List<string>();
int[] selectedIndeces = lbox.GetSelectedIndices();
foreach (int i in selectedIndeces)
selectedValues.Add(lbox.Items[i].Value);
return String.Join(",",selectedValues.ToArray());
}
public static void SetSelectedItems(this ListBox lbox, string[] values)
{
foreach (string value in values)
{
lbox.Items[lbox.Items.IndexOf(lbox.Items.FindByValue(value))].Selected = true;
}
}
public static void AddListItems(this ListBox lbox, string[] values)
{
foreach (string value in values)
{
ListItem item = new ListItem(value);
lbox.Items.Add(item);
}
}
Вы уверены, что имеете в виду переопределить? Или вы действительно имеете в виду "переопределение и перегрузка в зависимости от ситуации"?
Я бы перегружал метод Add, чтобы включить перегрузку, которая принимает строку CSV, анализирует ее в массив строк (или List) и передает его в AddRange.
Я также переопределил бы ToString(), чтобы вернуть значения в виде списка CSV.