我想要一个ListBox
个项目。虽然,每个项目应该有不同的值。
因此,当用户选择一个项目并按下一个按钮时,将调用一个方法,该方法将使用选择项目所具有的值。
我不想向用户透露项目值。
编辑:这不适用于ASP.NET,适用于Windows窗体应用程序。我只是认为HTML示例很容易阅读。
我的灵感来自HTML:
<form>
<input type="radio" name="sex" value="Value1" /> Male
<br />
<input type="radio" name="sex" value="Value2" /> Female
</form>
这也允许我使用与用户看到的值不同的值。
答案 0 :(得分:33)
您可以选择使用ListBox的DisplayMember显示的内容。
List<SomeData> data = new List<SomeData>();
data.Add(new SomeData() { Value = 1, Text= "Some Text"});
data.Add(new SomeData() { Value = 2, Text = "Some Other Text"});
listBox1.DisplayMember = "Text";
listBox1.DataSource = data;
当用户选择一个项目时,您可以从所选对象中读取值(或任何其他属性):
int value = (listBox1.SelectedItem as SomeData).Value;
更新:请注意,DisplayMember仅适用于属性,而不适用于字段,因此您需要稍微更改一下类:
public class SomeData
{
public string Value { get; set; };
public string Text { get; set; };
}
答案 1 :(得分:2)
项目有一个名为“Tag”的属性,您可以使用该属性存储您想要的任何信息(对用户隐藏)
ListViewItem myItem = new ListViewItem();
myItem.Text = "Users see this";
myItem.Tag = "Users don't see this";
(或在属性资源管理器中设置适当的属性)
答案 2 :(得分:2)
很简单:
foreach(var item in *Your Source List*)
{
ListItem dataItem = new ListItem();
dataItem.Text = "value to show";
dataItem.Value = *another value you want*;
listBox.Items.Add(dataItem);
}
答案 3 :(得分:1)
正如the 1st answer所述,无论您使用的是asp.net还是winforms,DisplayMember
的使用都有效。
如果您要使用相当旧的时尚Items.add
方式向ListBox
添加项目,还可以进行更多评论。
只是为了好玩,这里有一个简单的演示,你需要的东西(只需创建一个新的表格并放在它上面一个ListBox和一个标签):
public partial class Form1 : Form
{
class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", LastName, FirstName);
}
}
public Form1() { InitializeComponent(); }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
listBox1.DisplayMember = "LastName";
listBox1.DataSource = GetCustomers();
//listBox1.Items.AddRange(GetCustomers().ToArray());
}
private IEnumerable<Customer> GetCustomers()
{
return new List<Customer>()
{
new Customer() { FirstName = "Gustav", LastName = "MAHLER" },
new Customer() { FirstName = "Johann Sebastian", LastName = "BACH" }
};
}
private void lb_SelectedIndexChanged(object sender, EventArgs e)
{
label1.Text = listBox1.SelectedItem.ToString();
}
}
享受
PS:Tag
ListBox
不适用于object
:因为它接受ListView
的数组,而不是Tag
之类的特定项容器。但是在你的情况下你不需要任何东西。当您想要携带其他数据以及特定的TreeViewItem
或ListViewItem
时,Tag
非常有用。
顺便说一句,Control
定义在Button
级别,因此存在Label
,ListView
等等......但就我而言,我认为这是相当的将业务数据存储在其中的一个坏主意(无类型,UI耦合......)除了TreeView
和{{1}}这些相当方便的情况之外。
答案 4 :(得分:-1)
容易!
protected void Page_Load(object sender, EventArgs e)
{
llenaListBox(ListBox1, 0, 10);
}
private void llenaListBox(ListBox PoListBox, int PiMinimo, int PiMaximo)
{
int Li;
for (Li = PiMinimo; Li <= PiMaximo; Li++)
{
ListItem obj = new ListItem();
obj.Text = Li.ToString();
obj.Value = Li.ToString();
PoListBox.Items.Add(obj);
}
}