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的主要内容,如果未能解决你的问题,请参考以下文章