我必须重新定义ListBox类,以确保它返回所有选定项的csv字符串,并且还应该接收csv字符串并在需要时填充列表框。可以说我有这个代码。我必须覆盖哪些功能以及如何操作?
using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
public class ListBoxString : ListBox
{
}
}
答案 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列表返回。