5

我的检查列表框有问题。

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 放在一起。

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

4

8 回答 8

1

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

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

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

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

于 2012-11-15T13:28:28.123 回答
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() +"|";

        }
于 2012-11-15T14:05:34.307 回答
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 (DataRowView objDataRowView in checkedListBox1.CheckedItems) { MessageBox.Show("我的值:" + objDataRowView["Name"]); }

只有我的身份证回来:)

于 2012-11-16T07:50:43.213 回答
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循环以获取所有项目。

于 2012-11-15T13:14:42.593 回答
0

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

于 2012-11-15T13:44:39.710 回答
0

使用 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;

    }

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

于 2015-01-17T17:08:17.007 回答
0

尝试这个

foreach (object item in checkedListBox1.CheckedItems)
{
   DictionaryEntry de = (DictionaryEntry)item;
   string htKey = de.Key.ToString();
}
于 2012-11-15T13:14:13.420 回答
0

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

//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);
于 2018-02-23T01:04:51.027 回答