我有一个列表,其中包含来自LINQ查询的元素和两个组合框。我希望第一个组合框使用列表作为数据源,但第二个组合框使用相同的列表,而不在第一个组合框中选择项目。
I.E。:我有清单<&gt ;:A,B,C
Combobox1选项:A,B,C
Combobox1选择项目:A
Combobox2选项:B,C
以下是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class AdicionarEquipa_Admin: Form
{
private DiagramaEntidadesContainer dbATMT;
public AdicionarEquipa_Admin()
{
InitializeComponent();
dbATMT = new DiagramaEntidadesContainer();
PreencherListas();
}
private void PreencherListas()
{
List<Player> jogadores = (from player in dbATMT.PlayerSet
select player).ToList<Player>();
Player jogadorSelecionado = (Player)cB_addEquipaJogador1.SelectedItem;
List<Player> jogadores2 = new List<Player>();
foreach (Player jogador in jogadores)
{
if (jogador != jogadorSelecionado)
{
jogadores2.Add(jogador);
}
}
cB_addEquipaJogador1.DataSource = jogadores;
cB_addEquipaJogador2.DataSource = jogadores2;
}
private void cB_addEquipaJogador1_SelectedIndexChanged(object sender, EventArgs e)
{
PreencherListas();
}
private void cB_addEquipaJogador2_SelectedIndexChanged(object sender, EventArgs e)
{
PreencherListas();
}
}
}
这不起作用。 DiagramaEntidadesContainer是一个ado.net数据库。
答案 0 :(得分:1)
的.xaml
<ComboBox x:Name="cB_addEquipaJogador1" HorizontalAlignment="Left" Margin="120,55,0,0" VerticalAlignment="Top" Width="120" Loaded="ComboBox_Loaded"
SelectionChanged="ComboBox_SelectionChanged"/>
<ComboBox x:Name="cB_addEquipaJogador2" HorizontalAlignment="Left" Margin="120,163,0,0" VerticalAlignment="Top" Width="120" />
.xaml.cs
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
{
public partial class MainWindow : Window
{
List<Player> jogadores = new List<Player>();
public MainWindow()
{
InitializeComponent();
jogadores.Add(new Player());
jogadores.Add(new Player());
}
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
cB_addEquipaJogador1.ItemsSource = jogadores;
cB_addEquipaJogador1.SelectedIndex = 0;
}
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Player jogadorSelecionado = cB_addEquipaJogador1.SelectedItem as Player;
List<Player> jogadores2 = new List<Player>(jogadores.Count);
jogadores.ForEach(item =>
{
jogadores2.Add(item);
});
jogadores2.Remove(jogadorSelecionado);
cB_addEquipaJogador2.ItemsSource = jogadores2;
cB_addEquipaJogador2.SelectedIndex = 0;
}
}
public class Player
{
}
}
编辑:包含WinForms的版本,因为OP使用的是WinForms
了.Designer.cs
this.cB_addEquipaJogador1.SelectedIndexChanged += new System.EventHandler(this.cB_addEquipaJogador1_SelectedIndexChanged);
cB_addEquipaJogador2 不需要上面
的.cs
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class AdicionarEquipa_Admin : Form
{
private DiagramaEntidadesContainer dbATMT;
public AdicionarEquipa_Admin()
{
InitializeComponent();
dbATMT = new DiagramaEntidadesContainer();
//Needs improvement :/
cB_addEquipaJogador1.DataSource = (from player in dbATMT.PlayerSet select player).ToList<Player>();
cB_addEquipaJogador1.SelectedIndex = 0;
}
private void PreencherListas()
{
//Needs improvement :/
List<Player> jogadores = (from player in dbATMT.PlayerSet
select player).ToList<Player>();
Player value = cB_addEquipaJogador1.SelectedItem as Player;
List<Player> jogadores2 = new List<Player>(jogadores.Count);
jogadores.ForEach(item =>
{
jogadores2.Add(item);
});
jogadores2.Remove(value);
cB_addEquipaJogador2.DataSource = jogadores2;
cB_addEquipaJogador2.SelectedIndex = 0;
}
private void cB_addEquipaJogador1_SelectedIndexChanged(object sender, System.EventArgs e)
{
PreencherListas();
}
}
public class Player
{
}
}