重写列表框控件以返回连接的字符串值

时间:2010-11-22 22:21:38

标签: c# asp.net listbox listbox-control

我必须重新定义ListBox类,以确保它返回所有选定项的csv字符串,并且还应该接收csv字符串并在需要时填充列表框。可以说我有这个代码。我必须覆盖哪些功能以及如何操作?

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

    }
}

2 个答案:

答案 0 :(得分:4)

如果您只想添加功能,还可以添加扩展方法以添加此功能。以下是GetSelectItems到CSV字符串和字符串数组中的AddListItems的2个简单示例。

    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 :(得分:1)

你确定你的意思是覆盖吗?或者你的意思是“适当地覆盖和过载?”

我重载Add方法以包含一个带有CSV字符串的重载,将其解析为字符串数组(或List)并将其传递给AddRange。

我还会覆盖ToString()以将值作为CSV列表返回。