【问题标题】:CheckedListbox Displaymember and ValueMemberCheckedListbox Displaymember 和 ValueMember
【发布时间】:2012-11-04 02:04:32
【问题描述】:

我的检查列表框有问题。

public void GetFolder()
    { 
         var dict = new Dictionary<string, string>();
         foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
            {
             dict.Add(folder.Id.ToString(),folder.DisplayName);
            }        

       checkedListBox1.DataSource = new BindingSource(dict, null);
       checkedListBox1.DisplayMember = "Value";
       checkedListBox1.ValueMember = "Key";

    }

现在我想要得到所有的 Checked List 框,

我这样做是为了

         foreach (object item in checkedListBox1.CheckedItems)
        {
            lala = lala + item +"|";

        }

我的 CheckedListbox 向我显示了我从目录中读取的所有文件夹的 CheckIcon 和名称,我现在想在某些设置中存储 tie folder.Id 但只有 ID 但我总是将文件夹名和 ID 放在一起。

希望有人可以帮助我 也许我的眼睛上有一些西红柿:)

【问题讨论】:

  • hmmm 我的欢迎信息在哪里?!
  • 欢迎上网!你会在左边找到你的免费小马。小心点。彩虹从它的一端出来!哈哈我只是在开玩笑!他们都出来了。
  • 没有在我的帖子中我写了“嘿那里”但看不到:(

标签: c# checkboxlist


【解决方案1】:
public void GetFolder()
    { 
         var dict = new Dictionary<string, string>();
         ArrayList arr = new ArrayList();
         foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
            {
             dict.Add(folder.Id.ToString(),folder.DisplayName);
             arr.Add(folder.Id.ToString());
            }        

       checkedListBox1.DataSource = new BindingSource(dict, null);
       checkedListBox1.DisplayMember = "Value";
       checkedListBox1.ValueMember = "Key";

       //Do whatever to arraylist..
    }

这将为您提供一个包含所有 ID 的数组列表。您可以将其绑定到源,或运行 foreach 循环以获取所有项目。

【讨论】:

    【解决方案2】:

    我假设 lala 是你的设置字符串。

    如果是这样,请使用:

    lala = lala + item.Value.ToString() +"|";
    

    这样,lala woud 将包含所有 ID,如下所示: 1|2|34|567|5...

    【讨论】:

    • 是的,在我的测试表格中,所有已检查的 id 都存储在 lala 中。但 item.Value 是红色的下划线
    • 对不起,应该是 item.Value.ToString()
    • item.Value.ToString() 失败:对象不包含 Value 的定义
    • 如果您仍然得到 [Foldername,FOLDERID_JHGD3287rHDGX73],那么问题出在您的 Folder 类中。检查一下,看看 Folder.Id 字段是如何在那里生成的。
    • 好的,试试 Aram Beginyan 的解决方案
    【解决方案3】:

    好的,试试这个:

    ArrayList folders=new ArrayList();
    foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
                {
                 folders.Add(folder);
                }    
    
           checkedListBox1.DataSource = folders;
           checkedListBox1.DisplayMember = "DisplayName";
           checkedListBox1.ValueMember = "Id";
    
    foreach (Folder item in checkedListBox1.CheckedItems)
            {
                lala += item.Id.ToString() +"|";
    
            }
    

    【讨论】:

      【解决方案4】:

      也许我有办法。

      我用 DataTable 代替 Dictionary

              DataTable table = new DataTable();
              table.Columns.Add("Name",typeof(string));
             table.Columns.Add("Key", typeof(string));
      
             table.Rows.Add("ID1=", "Folder1");
             table.Rows.Add("ID2=", "Folder2");
             table.Rows.Add("ID3=", "Folder3");
             table.Rows.Add("ID4=", "Folder4");
             table.Rows.Add("ID5=", "Folder5");
             table.Rows.Add("ID6=", "Folder6");
      

      现在取消单击我得到的所有选定项目

      foreach(checkedListBox1.CheckedItems 中的 DataRowView objDataRowView) { MessageBox.Show("我的值:" + objDataRowView["Name"]); }

      只返回我的 ID :)

      【讨论】:

        【解决方案5】:

        试试这个

        foreach (object item in checkedListBox1.CheckedItems)
        {
           DictionaryEntry de = (DictionaryEntry)item;
           string htKey = de.Key.ToString();
        }
        

        【讨论】:

          【解决方案6】:

          在您的 foreach 中,创建一个 var 项而不是对象 - 之后您将能够访问 Value 属性。

          【讨论】:

          • 你是这个意思吗? foreach (var item in checkedListBox1.CheckedItems) { lala = lala + item.Value.ToString() +"|"; } 还有错误
          【解决方案7】:

          //这是一个简单的方法[我是编码新手]。

          //CheckedListBox可以以DataRowView的形式检索CheckedItems

          // 对于 CheckedListBox,请确保您的数据源也传递一个“ID”值。

          // 设置 CheckedListBox 的数据源

               var dict = new Dictionary<string, string>();
               foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
                  {
                   dict.Add(folder.Id.ToString(),folder.DisplayName);
                  }        
          
          
             checkedListBox1.DataSource = new BindingSource(dict, null);
             checkedListBox1.DisplayMember = "Value"; //This will be the folders display name in the check box
             checkedListBox1.ValueMember = "Key"; // this will be the folder's ID 
          

          //创建一个列表来保存所有选定的ID

          List<string> ListOfCheckedIDs = new List<string>();
          

          // 现在将 CheckedListBox 中的所有 CheckedItems 获取为 DataRowView,并使用包含文件夹 ID 的 ValueMember 将文件夹 ID 添加到 ListOfCheckedIDs

          foreach (DataRowView drowVw in checkedListBox1.CheckedItems)
          
                  {
                      ListOfCheckedIDs.Add(drowVw[checkedListBox1.ValueMember].ToString());
                  }
          

          // 现在在 ListOfCheckedIDs 上使用 string.join,这样就不会有不需要的尾随字符

          string myStringOfIDs = string.Join("|", ListOfCheckedIDs);
          

          【讨论】:

            【解决方案8】:

            使用 displaymember 和 valuemember 绑定 CheckedListBOx 或任何其他控件非常简单,您只需指定控件的数据源属性以及 displaymember 和 valuemember。

            以下是我测试过的工作代码 100% 为我工作:P

            /* checkedlistbox bindig code */
            
                DataSet ds = new DataSet();
            
                string strChechboxlist = "select Subject_ID as code, SubjectName as Display from dbo.Mst_Subject_Detail";
            
            /* filldataset() is function i have created to return dataset. */
            
                ds = dc.FillDataSet(strChechboxlist);
                if (ds.Tables[0].Rows.Count > 0)
                {
                checkedListBox1.DataSource = ds.Tables[0];
                checkedListBox1.DisplayMember = "Display";
                checkedListBox1.ValueMember = "code"; 
            
                }
            
            /* for fetching valuemember or displaymember from checkedlistbox */
            
            
                for(int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
                {
            
                /*Now with the following code we can get valemember and displaymember as per your requirement you can store in table. */
            
                DataRow r;
            
                r = ((DataRowView)this.checkedListBox1.CheckedItems[i]).Row;  
            
                string val = (r[this.checkedListBox1.ValueMember]).ToString();  
            
                string dis = (r[this.checkedListBox1.DisplayMember]).ToString();    
            
                r = null;
            
                }
            

            注意:- 我附上代码的工作演示

            【讨论】:

            • 我认为你双张贴/粘贴。这似乎不适用于这个问题。
            猜你喜欢
            • 1970-01-01
            • 2011-04-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-27
            • 1970-01-01
            相关资源
            最近更新 更多