0

我的表单中有两个列表框,在这两个框之间有一个按钮。在第一个框中,我绑定了数据库中的一些数据,并且从这个列表框中我必须选择项目,并且应该在第二个列表框中显示这些选定的项目。当我单击按钮时应该会发生这种情况。我使用了以下代码。我使用了哈希表。

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();
    }
}

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

4

3 回答 3

0

你需要哈希表吗?使用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));
于 2012-09-11T15:55:33.883 回答
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();
    }
}
于 2012-09-11T11:18:10.307 回答
0

您应该改用SelectedItems该列表框上的属性SelectedValue。目前,您的 Hashtable 仅包含一个元素。

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

于 2012-09-11T11:22:00.383 回答