CheckedListbox Displaymember 和 ValueMember

Posted

技术标签:

【中文标题】CheckedListbox Displaymember 和 ValueMember【英文标题】:CheckedListbox Displaymember and 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 我的欢迎信息在哪里?! 欢迎上网!你会在左边找到你的免费小马。小心点。彩虹从它的一端出来!哈哈我只是在开玩笑!他们都出来了。 没有在我的帖子中我写了“嘿那里”但看不到:( 【参考方案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;

    

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

【讨论】:

我认为你双张贴/粘贴。这似乎不适用于这个问题。

以上是关于CheckedListbox Displaymember 和 ValueMember的主要内容,如果未能解决你的问题,请参考以下文章

CheckedListBox  数据绑定

C# CHECKEDLISTBOX用法总结

怎样获取checkedListBox 中选中的项的文本

CheckedListBox - FileInfo 对象的集合 - 显示自定义 ToString

操作可选列表框控件 CheckedListBox

winform checkedlistbox 设置行颜色