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

时间:2011-07-21 06:00:29

标签: c# winforms

我正在以MySQL(C#)的胜利形式为大学做学生出勤项目。

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

更新了查询 -

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&lt; 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 个答案:

答案 0 :(得分: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);