Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据组合框选择从列表中减去项_C#_List_Linq_Combobox - Fatal编程技术网

C# 根据组合框选择从列表中减去项

C# 根据组合框选择从列表中减去项,c#,list,linq,combobox,C#,List,Linq,Combobox,我有一个包含LINQ查询元素的列表和两个combobox。我希望第一个组合框使用列表作为数据源,但第二个组合框使用相同的列表,而没有在第一个组合框上选择项目。 例如:我有列表:A、B、C Combobox1选项:A、B、C Combobox1所选项目:A Combobox2选项:B、C 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin

我有一个包含LINQ查询元素的列表和两个combobox。我希望第一个组合框使用列表作为数据源,但第二个组合框使用相同的列表,而没有在第一个组合框上选择项目。 例如:我有列表: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();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类设备管理员:表格
{
专用诊断容器dbATMT;
公共AdicionarEquipa_Admin()
{
初始化组件();
dbATMT=新的DiagramentIdaDesContainer();
前额肌();
}
私人无效预检表()
{
列出jogadores=(来自dbATMT.PlayerSet中的播放器
选择player.ToList();
玩家jogadorSelecionado=(玩家)cB_addEquipaJogador1.SelectedItem;
List jogadores2=新列表();
foreach(Jogadors中的运动员jogador)
{
如果(jogador!=jogador seleconado)
{
jogadores2.添加(jogador);
}
}
cB_addEquipaJogador1.DataSource=jogadores;
cB_addEquipaJogador2.DataSource=jogadores2;
}
私有无效cB_addEquipaJogador1_SelectedIndexChanged(对象发送方,事件参数e)
{
前额肌();
}
私有无效cB_addEquipaJogador2_SelectedIndexChanged(对象发送方,事件参数e)
{
前额肌();
}
}
}
这不管用。DiagramentDadesContainer是一个ado.net数据库。

编辑:

由于列表是唯一的,您可以简单地删除该项并将其用作数据源

jogadores.Remove(jogadorSelecionado);
...
cB_addEquipaJogador2.DataSource = jogadores;

您必须创建一份不带选定值的列表副本。可以这样做:

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 (var jogador in jogadores)
    {
        if (jogador != jogadorSelecionado)
        {
            jogadores2.Add(jogador);
        }
    }

    cB_addEquipaJogador1.DataSource = jogadores;
    cB_addEquipaJogador2.DataSource = jogadores2;
}
private void PreencherListas()
{
列出jogadores=(来自dbATMT.PlayerSet中的播放器
选择player.ToList();
玩家jogadorSelecionado=(玩家)cB_addEquipaJogador1.SelectedItem;
List jogadores2=新列表();
foreach(Jogadors中的var jogador)
{
如果(jogador!=jogador seleconado)
{
jogadores2.添加(jogador);
}
}
cB_addEquipaJogador1.DataSource=jogadores;
cB_addEquipaJogador2.DataSource=jogadores2;
}
  • 我已经举了一个例子,说明我认为你在努力做什么
.xaml

cB_addEquipaJogador2不需要上述内容

.cs

使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类设备管理员:表格
{
专用诊断容器dbATMT;
公共AdicionarEquipa_Admin()
{
初始化组件();
dbATMT=新的DiagramentIdaDesContainer();
//需要改进:/
cB_addEquipaJogador1.DataSource=(来自dbATMT.PlayerSet select player中的player).ToList();
cB_addEquipaJogador1.SelectedIndex=0;
}
私人无效预检表()
{
//需要改进:/
列出jogadores=(来自dbATMT.PlayerSet中的播放器
选择player.ToList();
Player value=cB_addEquipaJogador1.选择editem作为Player;
List jogadores2=新列表(jogadores.Count);
jogadores.ForEach(项目=>
{
jogadores2.添加(项目);
});
jogadores2.移除(值);
cB_addEquipaJogador2.DataSource=jogadores2;
cB_addEquipaJogador2.SelectedIndex=0;
}
私有无效cB_addEquipaJogador1_SelectedIndexChanged(对象发送方,System.EventArgs e)
{
前额肌();
}
}
公开课选手
{
}
}

List.Remove函数返回一个布尔值,因此我应该执行'jogadores.Remove(jogadorSelecionado)';jogadores2=jogadores;'?您必须将第一个列表的内容复制到列表的新实例中,不包括您所说的“编辑”无效的选定元素(jogadorSelecionado)。我正在使用InitializeComponent()上的函数;在组合框的SelectedIndexChanged函数上单击和,当我选择on选项时,它会出错。或者使它们相同,或者在一个选项中阻塞,我无法更改它…我的意思是,您不需要
cB_addEquipaJogador1.DataSource=jogadores如果组合框已包含项目。如果不清楚,请尝试其他选项。当SelectedIndexChanged事件激发时,是否确实调用了
PreencherListas()
函数?否,该项是索引项。SelectedIndexChanged。我能告诉您的只是插入断点并逐步检查代码以查看错误所在位置。您需要使用if语句来检查删除是否成功。cB_addEquipaJogador1是什么类型的?@NelsonSilva它对我有用:?但我认为您设置的错误,但我已将我的答案说得更清楚,对不起:/add this.cB_addEquipaJogador1.SelectedIndexChanged+=new System.EventHandler(this.cB_addEquipaJogador1\u SelectedIndexChanged);谢谢你取得了巨大的进步!在你的问题中,你只想要“我有列表:A,B,C Combobox1选项:A,B,C Combobox1选定项:A Combobox2选项:B,C”@NelsonSilva,但我会尝试更新我的answer@NelsonSilva:D
<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" />
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
    {
    }
}
this.cB_addEquipaJogador1.SelectedIndexChanged += new System.EventHandler(this.cB_addEquipaJogador1_SelectedIndexChanged);
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
    {
    }
}