【问题标题】:Listbox bindind from another listbox来自另一个列表框的列表框绑定
【发布时间】:2012-09-11 11:11:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用循环将所有选定的值添加到哈希表中

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

      【讨论】:

        【解决方案3】:

        你需要哈希表吗?使用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));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 2011-04-20
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多