来自另一个列表框的列表框绑定

时间:2012-09-11 11:11:05

标签: c# winforms

我的表单中有两个列表框,这两个框之间有一个按钮。在第一个框中,我从数据库中绑定了一些数据,我必须从这个列表框中选择项目,并在第二个列表框中显示这些选定的项目。这应该发生在我点击一个button.i使用下面的代码。我使用哈希表。

private void btnCATAdd_Click(object sender, EventArgs e)
{
    Hashtable ht = new Hashtable();
    ht.Add(lbCATallSubcat.SelectedValue.ToString(),
                                    lbCATallSubcat.Text.ToString());
    int i = 0;
    foreach (string ent in ht.Values)
    {
       string[] name = new string[lbCATallSubcat.Items.Count];
       for (i = 0; i < lbCATallSubcat.SelectedItems.Count; i++)
       {
           name[i] = lbCATallSubcat.Text;
           this.lbCATSelectedSubcat.Items.Add(name[i]);
       }
       lbCATSelectedSubcat.DisplayMember = ht.Values.ToString();
       lbCATSelectedSubcat.ValueMember = ht.Keys.ToString();
    }
}

当我在第一个列表框中仅选择单个项目但是当从第一个列表框中选择了多个项目时无法显示时,它的工作正常

3 个答案:

答案 0 :(得分:0)

使用循环

在哈希表中添加所有选定的值
private void btnCATAdd_Click(object sender, EventArgs e)
{
    Hashtable ht = new Hashtable();
     for(int i=0;i<lbCATallSubcat.Items.Count;i++)
      {
         if(ht.items[i].Selected)
           {
             ht.Add(lbCATallSubcat.Items[i].Value.ToString(),
                                    lbCATallSubcat.Items[i].Text.ToString());
           }
       }

      i = 0;
    foreach (string ent in ht.Values)
    {
       string[] name = new string[lbCATallSubcat.Items.Count];
       for (i = 0; i < lbCATallSubcat.SelectedItems.Count; i++)
       {
           name[i] = lbCATallSubcat.Text;
           this.lbCATSelectedSubcat.Items.Add(name[i]);
       }
       lbCATSelectedSubcat.DisplayMember = ht.Values.ToString();
       lbCATSelectedSubcat.ValueMember = ht.Keys.ToString();
    }
}

答案 1 :(得分:0)

您应该在该列表框中使用SelectedItems属性,而不是SelectedValue。目前,您的Hashtable只包含一个元素。

请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selecteditems.aspx

答案 2 :(得分:0)

你需要Hashtable吗?使用LINQ,您可以执行以下操作:

public ObjHoldingData
{
     public Display { get; set; }
     public Value { get; set; }
}

public class Form
{
     Form()
     {
           var dataList = new List<ObjHoldingData>();
           //TODO: Fill list with all the data you pulled

           Listbox1.Datasource = dataList;
           Listbox1.DisplayMember = "Display";
           Listbox1.ValueMember = "Value";
     }

     protected void ButtonClick()
     {
          Listbox2.Datasource = Listbox1.SelectedItems.Cast<ObjHoldingData>().ToList();
          Listbox2.DisplayMember = "Display";
          Listbox2.ValueMember = "Value";               
     }
}

如果您仍然需要Hashtable,可以在按钮开头点击:

var ht = new Hashtable(ListBox1.SelectedItems.Cast<ObjHoldingData>().ToDictionary(o => o.Display, o => o.Value));