【问题标题】:how to move selected item from listbox to another如何将所选项目从列表框移动到另一个
【发布时间】:2021-04-18 06:23:40
【问题描述】:

我创建两个类列表并从两个列表中填充它们和我的数据源代码列表框,例如下面的代码

  class Classgreat
{
    public int machid { get; set; }
    public string lm { get; set; }
    public int idline { get; set; }
}
  class Classskill
{
    public int machid { get; set; }
    public string lm { get; set; }
    public int idline { get; set; }
}
 public void fill_per_skill()
    {
        SqlConnection cs = new SqlConnection("");
        SqlDataAdapter adapter = new SqlDataAdapter("", cs);

        DataTable dt = new DataTable();
        adapter.Fill(dt);
        skill = (from DataRow dr in dt.Rows
            select new Classskill()
            {
                machid = Convert.ToInt32(dr["machid"]),
                lm = dr["lm"].ToString(),
                idline = Convert.ToInt32(dr["idline"]),
            }).ToList();
        listBoxrole.DataSource = null;
        listBoxrole.Items.Clear();
        this.listBoxrole.DataSource =skill ;
        this.listBoxrole.DisplayMember = "lm";
        this.listBoxrole.ValueMember = "machid";
    }
 public void fill_per_great()
        {            
             SqlConnection cs = new SqlConnection("");
            SqlDataAdapter adapter = new SqlDataAdapter("", cs);

            DataTable dt = new DataTable();
            adapter.Fill(dt);
            great = (from DataRow dr in dt.Rows
                select new Classgreat()
                {
                    machid = Convert.ToInt32(dr["machid"]),
                    lm = dr["lm"].ToString(),
                    idline = Convert.ToInt32(dr["idline"]),
                }).ToList();
            listBoxgreat.DataSource = null;
            listBoxgreat.Items.Clear();
            this.listBoxgreat.DataSource =great ;
            this.listBoxgreat.DisplayMember = "lm";
            this.listBoxgreat.ValueMember = "machid";
        }

这很好,但是当我想在两个列表(技能和伟大)之间移动项目时,会出现错误,不能将伟大的类转换为类技能并且不起作用 我该怎么做呢

【问题讨论】:

  • 请阅读 C# 命名约定 - 这段代码与我们其他人在命名方面使用的代码完全不符
  • 您不能在“foreach”循环中删除数据

标签: c# list listbox


【解决方案1】:

你的类在数据方面是相同的,为什么有两个......?

我可能会考虑将您的数据留在数据表中,因为 c# 中已经有很多功能可以过滤它们

    public void FillAll()
    {            
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT machid, lm, idline, 'g' as what FROM ...", "conn str here");

        DataTable dt = new DataTable();
        adapter.Fill(dt); // Fill greats 

        adapter.SelectCommand.CommandText = "SELECT machid, lm, idline, 's' as what FROM ..."; 

        adapter.Fill(dt); // Fill skills into same table with different value of What column
        
        this.listBoxgreat.DisplayMember = "lm";
        this.listBoxgreat.ValueMember = "machid";
        this.listBoxgreat.DataSource = new DataView(dt) { RowFilter = "[what]='g'" };

        this.listBoxSkill.DisplayMember = "lm";
        this.listBoxSkill.ValueMember = "machid";
        this.listBoxSkill.DataSource = new DataView(dt) { RowFilter = "[what]='s'" };
    }

将所有数据填充到同一个表中,并使用一列来区分它们。使用围绕数据表并提供过滤功能的 DataView,仅将 What=s 过滤到 Skill 列表中,将 What=g 过滤到 Great 列表中

现在,如果您直接在数据表中更改 What,它将导致项目移动列表

(listboxSkill.SelectedItem as DataRowView).Row["what"] = "g"; // it will move from skill to great

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2020-07-29
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多