我有两个列表,第一个(右)代表所有汽车的列表,而secound(左)代表一个待售汽车列表。
我的控件中有两个ListBox,每个ListBox都会显示一个汽车列表。我想点击一个按钮(<<<),ListBox 1中的选定汽车将被添加到ListBox 1列表中。
这两个列表是在控件类之外创建的,所以我需要绑定到ListBoxes。我曾尝试使用DataSource,但如果我设置它,则无法使用Add Remove from Items。哪种方法最好?
感谢。
OBS:我已经改为ListBox。
我正在使用的解决方案是:非常非常丑陋的解决方案......:/
public IList<Item> ItensToMaintaim
{
get { return (IList<Item>)this.itensToMainTainList.DataSource; }
set
{
//Need to set null to refresh
this.itensToMainTainList.DataSource = null;
this.itensToMainTainList.DataSource = value;
this.itensToMainTainList.DisplayMember = "Name";
this.itensToMainTainList.ValueMember = "Name";
}
}
public IList<Item> Itens
{
get { return (IList<Item>)this.itensList.DataSource; }
set
{
//Need to set null to refresh
this.itensList.DataSource = null;
this.itensList.DataSource = value;
this.itensList.DisplayMember = "Name";
this.itensList.ValueMember = "Name";
}
}
private void removeItem_Click(object sender, EventArgs e)
{
if (this.itensToMainTainList.SelectedItem != null)
{
this.itens2.Remove((Item)this.itensToMainTainList.SelectedItem);
this.ItensToMaintaim = this.itens2;
if (this.itensToMainTainList.SelectedIndex < 0)
{
this.itensToMainTainList.SelectedIndex = this.itens2.Count - 1;
}
}
}
private void addItem_Click(object sender, EventArgs e)
{
if (this.itensList.SelectedItem != null)
{
bool contains = false;
contains = this.itens2.Contains(this.itensList.SelectedItem);
if (!contains)
{
this.itens2.Add((Item)this.itensList.SelectedItem);
this.ItensToMaintaim = this.itens2;
}
if (this.itensList.SelectedIndex < this.itens1.Count - 1)
{
this.itensList.SelectedIndex++;
}
}
}
答案 0 :(得分:2)
设置DataSource后,您无法向该集合添加项目。
"Items collection cannot be modified when the DataSource property is set."
但你可以通过一些解决方法
来做到这一点1)保存到数据库并使用新值重新加载并绑定它
OR
2)获取列表框的现有数据源并将其存储在变量中并添加一个新项目(从所选项目创建)然后重新绑定它
示例(这些类特定于我的需要,您可以根据您的类结构进行自定义)
//Take the existing
List<MailerKit> objExisting = (List<MailerKit>)comboBox1.DataSource;
//Add the new one
objExisting.Add(new MailerKit { KitName = comboBox1.SelectedText, ID = Convert.ToInt32(comboBox1.SelectedValue) });
//Rebind again
comboBox1.DataSource = objExisting;
comboBox1.DisplayMember = "KitName";
comboBox1.ValueMember = "ID";
答案 1 :(得分:0)
您可以创建自定义事件,以便在列表中添加和删除项目。在控件类中处理这些事件,您已在其中定义了组合框以添加或删除其项目。
答案 2 :(得分:0)
将数据源与数据源绑定在一起。然后删除并添加项目到列表,而不是组合自己。