C#使用Listbox1中的值进行SQL查询以过滤Listbox2

问题描述

我有三个sql表-团队(Id,名称),玩家(Id,名称)和TeamPlayer(Id,TeamID,玩家ID)。我的窗体上也有两个ListBoxes,并且想要在第一个ListBox上选择一个项目时过滤第二个ListBox

这主要是设置过程,但是我遇到了问题,即代码不喜欢在注释行的LstTeams_SelectedindexChanged方法中传递给它的值。

private void Form1_Load(object sender,System.EventArgs e)
    {
        showTeams();
    }

    private void showTeams()
    {
        // Create the sql Query,and an sqlDataAdapter using this query and sqlConnection declared earlier
        string query = "select * from Team";
        sqlDataAdapter sqlDataAdapter = new sqlDataAdapter(query,sqlConnection);

        // Get the 'Team' Table and Fill it
        DataTable teamTable = new DataTable();
        sqlDataAdapter.Fill(teamTable);

        // Populate the 'Team' ListBox with the 'Team' Table
        lstTeams.DataSource = teamTable.defaultview;
        lstTeams.displayMember = "Name";
        lstTeams.ValueMember = "Id";
    }

    private void LstTeams_SelectedindexChanged(object sender,System.EventArgs e)
    {
        string TeamID = lstTeams.GetItemText(lstTeams.SelectedValue);
        MessageBox.Show("TeamID: " + TeamID);

        // Create the sql Query,and an sqlDataAdapter using this query and sqlConnection declared earlier
        string query = "select * from Player p inner join TeamPlayer tp on p.Id = tp.PlayerID where tp.TeamID = @TeamID";

        sqlCommand sqlCommand = new sqlCommand(query,sqlConnection);
        sqlCommand.Parameters.AddWithValue("@TeamID",lstTeams.SelectedValue); // this
        sqlDataAdapter sqlDataAdapter = new sqlDataAdapter(sqlCommand); // causes the dataadapter to error

        // Get the 'Team' Table and Fill it
        DataTable teamTable = new DataTable();
        sqlDataAdapter.Fill(teamTable);

        // Populate the 'Team' ListBox with the 'Team' Table
        lstPlayers.DataSource = teamTable.defaultview;
        lstPlayers.displayMember = "Name";
    }

我的错误是:

System.ArgumentException: 'No mapping exists from object type System.Data.DaTarowView to a kNown managed provider native type.'

我已经找到了一些解决方案,但无法获得有效的结果。

谢谢您提供的帮助:)。

解决方法

经过进一步研究并从对我的问题的评论中获得了一些指导,我发现以下方面取得了成功:

DataRowView data = lstTeams.SelectedItem as DataRowView;
int TeamID = int.Parse(data["Id"].ToString());

string query = "select * from Player p inner join TeamPlayer tp on p.Id = tp.PlayerID where tp.TeamID = " + TeamID;

在ListBox1.SelectedIndexChanged方法内部。