首页 文章

如何将Winform Listbox1中的项目集合移动到Listbox2?

提问于
浏览
-1

我正在用MySQL(C#)以win形式为大学做学生出勤项目 .

我已经问Hidden Column in Listbox我得到了解决方案 .

Updated Query -

string MyConString = ConfigurationManager.ConnectionStrings["College_Management_System.Properties.Settings.cmsConnectionString"].ConnectionString;
                MySqlConnection connection = new MySqlConnection(MyConString);
                string cnd1 = "select name,admin_no from student_admision_master where course='" + course_code + "' AND year='" + year_code + "' AND sem='" + semester_code + "' AND batch='" + batch_code + "'";
                MySqlDataAdapter da = new MySqlDataAdapter(cnd1, connection);
                connection.Open();
                DataSet ds = new DataSet();
                MySqlCommand command = connection.CreateCommand();
                da.Fill(ds, "student_admision_master");
                //dataGridView1.DataSource = ds.Tables[formName];
                listBox1.DataSource = ds.Tables[0].DefaultView;
                listBox1.DisplayMember = "name";
                listBox1.ValueMember = "admin_no";
                connection.Close();

我在LIstbox中找到了学生姓名 . 但是,.. Listbox到Listbox移动代码抛出错误,..

//所有Listbox2项目移动到列表框3

private void btn_toOd_Click(object sender, EventArgs e)
            {
                int count = listBox2.Items.Count;
                for (int i = 0; i < count; i++)
                {
                    listBox3.Items.Add(listBox2.Items[i].ToString());
                }
                listBox2.Items.Clear();
            }

//所有Listbox3项目移动到列表框2

private void btn_fromOd_Click(object sender,EventArgs e){int count = listBox3.Items.Count; for(int i = 0; i <count; i){listBox2.Items.Add(listBox3.Items [i] .ToString()); } listBox3.Items.Clear(); }

//仅限所选项目移动..

private void btn_toAb_Selected_Click(object sender, EventArgs e)
        {
            int count = listBox1.SelectedItems.Count;
            for (int i = 0; i < count; i++)
            {
                listBox2.Items.Add(listBox1.SelectedItems[i].ToString());
            }

            for (int i = 0; i < count; i++)
            {
                listBox1.Items.Remove(listBox1.SelectedItems[0]);
            }
        }

        private void btn_fromAb_Selected_Click(object sender, EventArgs e)
        {
            int count = listBox2.SelectedItems.Count;
            for (int i = 0; i < count; i++)
            {
                listBox1.Items.Add(listBox2.SelectedItems[i].ToString());
            }

            for (int i = 0; i < count; i++)
            {
                listBox2.Items.Remove(listBox2.SelectedItems[0]);
            }
        }

设置DataSource属性时,无法修改项集合 . 在ARGUMENT EXCEPTION中 .

如何将Listbox1中的项目集合移动到Listbox2 .

以及如何从列表框中访问特定的ValueMember(admin_no) .

bzs我想根据admin_no保存记录 .

信息是否足够或者我可以在这里添加图片,..

请给出一个想法!...

提前致谢....

1 回答

  • 1

    您的列表框是数据绑定 - 这意味着,列表框中的项目由绑定管理器自动管理 . 你无法真正按照你的方式移动物品 .

    相反,您需要相应地修改基础数据源 . 这意味着:不要在列表框中添加/删除项目,而是从基础数据集添加/删除项目 .

    列表框中的每个项目都是 DataRowDataRowView ,其具有 Row 属性以访问基础 DataRow . 一旦有权访问 DataRow ,就可以使用 row['fieldname'] 确定字段值 .

    要将行从一个数据集移动到另一个数据集,您必须使用目标表上的 ImportRow 方法添加该行 . 然后,您必须从源表中删除该行 . 示例(您可能需要稍微玩一下,因为我现在还没有尝试过):

    DataRow row = listBox.SelectedItem;
    /* The above may need to be changed to
       DataRow row = (listBox.SelectedItem as DataRowView).Row;
       in case the SelectedItem is a DataRowView instead of a DataRow
     */
    destDataSet.Table.ImportRow(row);
    sourceDataSet.Table.Remove(row);
    

相关问题