CheckedListbox Displaymember和ValueMember

时间:2012-11-15 13:06:47

标签: c# checkboxlist

我的Checked List Box有问题。

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和我从Directory中读取的所有文件夹的名称,我现在想要存储tie文件夹.Id在某些设置中但只有ID但我总是将Foldername和ID放在一起。< / p> 希望有人可以帮助我 也许我的眼睛上有一些西红柿:)

8 个答案:

答案 0 :(得分: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循环以获取所有项目。

答案 1 :(得分:1)

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

如果是这种情况,请使用:

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

这样,lala将包含所有这样的ID: 1 | 2 | 34 | 567 | 5 ...

答案 2 :(得分:1)

好的,试试这个:

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() +"|";

        }

答案 3 :(得分:1)

也许我有一个解决方案。

我使用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回复:)

答案 4 :(得分:0)

试试这个

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

答案 5 :(得分:0)

在你的foreach中,创建一个var项而不是object - 之后你就可以访问Value属性了。

答案 6 :(得分:0)

我测试了一个新项目。 :) 所以,如果出现问题,没问题* g

private void button1_Click(object sender,EventArgs e)         {

       var dict = new Dictionary<string, string>();

       dict.Add("aQYCeWGlY9aKLAQANCS+7ujPFQpP5KZ/ydAp2AAAAEaCNAAA=", "Folder1");
       dict.Add("HF§CeWGlY9aKLAQATKJZ63wo8TpT3xtDFVRdrAAAAANsVAAA=", "Folder2");
       dict.Add("AAAAAACTXZc0AXhaQYCeWGlY9aKLAQH8KxFhrAAAARAi9AAA=", "Folder3");
       dict.Add("AAAAAACTXZc0AXhaQYCeWGlY9aKLAQv+KxFhrAAAARAi+BBB=", "Folder4");
       dict.Add("AlY9aKLAQC9TICb7ytCSbvH6E+KxFhrHd8883AAAARAjAAAA=", "Folder5");
       dict.Add("AAMkADE5YmIwZDA3LTdjMzAtNDZlOS04MDc3LAAAAEaCNAAA=", "Folder6");


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

    }

点击我的checkedListBox1显示我, 文件夹1 文件夹2 Folder3

我如何只阅读所有选定项目的按键? 我想存储一个重新启动的应用程序集,检查存储的文件夹ID

private void button2_Click(object sender,EventArgs e)         {            int allDirCount = checkedListBox1.CheckedItems.Count;

        foreach (var item in checkedListBox1.CheckedItems)
        {


        }

        textBox3.Text = allDirCount.ToString();
    }

如果我检查一些文件夹一个klick Button2 我得到了所有选定的项目,但有Foldernames :(

其他一些想法?

答案 7 :(得分:0)

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

// CheckedListBox可以以DataRowView

的形式检索CheckedItems

//对于CheckedListBox,确保您的数据源也传递了一个&#34; ID&#34;值。

//设置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中的所有CheckedItem作为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);