Переопределите элемент управления Listbox, чтобы вернуть объединенное строковое значение - PullRequest
2 голосов
/ 23 ноября 2010

Мне нужно переопределить класс ListBox, чтобы убедиться, что он возвращает строку csv всех выбранных элементов, а также должен принимать строку csv и заполнять список при необходимости.Допустим, у меня есть этот код.Какие функции мне нужно переопределить и как мне это сделать?

using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
    public class ListBoxString : ListBox
    {

    }
}

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

Если все, что вы хотите сделать, это добавить функциональность, вы также можете добавить методы расширения, чтобы добавить эту возможность. Вот 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);
        }
    }
1 голос
/ 23 ноября 2010

Вы уверены, что имеете в виду переопределение?Или вы действительно имеете в виду «переопределение и перегрузка в зависимости от ситуации»в AddRange.

Я бы также переопределил ToString (), чтобы вернуть значения в виде списка CSV.

...