c# – 在Checked List Box中获取带有值的索引
发布时间:2020-12-15 23:52:37 所属栏目:百科 来源:网络整理
导读:我实际上发现当我单步执行代码时chkContactType.Items是空的.我甚至为chkContactType.Items.Count添加了一个Watch,它永远不会是0.我现在非常困惑,因为它显然不是因为我的Insert方法工作正常,它使用这些相同的框并为每个项插入Value Member. … 我有一些检查
我实际上发现当我单步执行代码时chkContactType.Items是空的.我甚至为chkContactType.Items.Count添加了一个Watch,它永远不会是0.我现在非常困惑,因为它显然不是因为我的Insert方法工作正常,它使用这些相同的框并为每个项插入Value Member. …
我有一些检查列表框控件,我需要根据项目值设置CheckState,因为这是存储在DB中的现有记录.不幸的是,我只看到了一种通过索引设置它的方法,该索引没有存储.索引是控件的本地索引,因此,例如,控件ContactType中有15个项目.指数是0-14.项目价值分别为39,40,41,42,43,44,45,46,47,48,49,50,2077,2078,2079.如何使用Value Member值获取索引值或使用Value Member值设置每个返回项的checkstate? 谢谢 private void PaintDetails(Guid cNoteID) { var cNoteDetailDT = CurrentCaseNote.GetCNoteDetail(cNoteID); LoadCaseNoteDetailData(cNoteDetailDT.Rows[0]); // Load Contact Type Data for this CaseNote // contactTypeDT returns ItemID of chk items // that were checked for this Guid using (var contactTypeDT = CurrentCaseNote.GetCNoteContactType(cNoteID)) { if (contactTypeDT.Rows.Count > 0) foreach (DataRow row in contactTypeDT.Rows) { LoadContactTypeData(row); } } } private void LoadContactTypeData(DataRow row) { // This does not work var theItem = row["ItemID"].ToString(); // itemIndex always ends up set to -1 var itemIndex = chkContactType.Items.IndexOf(theItem); chkContactType.SetItemChecked((int) itemIndex,true); // This works I just need to supply the correct index chkContactType.SetItemChecked(0,true); } 编辑回应评论 这就是我填充Checked ListBox的方法.我知道那里有一个“神奇的数字”.我正在做.它涉及ContactType数据库中的CategoryID. // Contact Type Check List Box chkContactType.DataSource = CurrentCaseNote.GetMaintItems(1); chkContactType.DisplayMember = "ItemDescription"; chkContactType.ValueMember = "ItemID"; 然后是CurrentCaseNote BLL(有点) – > public static DataTable GetMaintItems(int iCat) { IQueryable<tblCaseNotesMaintItem> tItems = CaseNoteDAL.GetCNTable(); return (tItems.Where(item => item.CategoryID == iCat & item.IsActive).OrderBy( item => item.OrderID).Select(item => new {item.ItemID,item.ItemDescription})).CopyLinqToDataTable(); } 最后是DAL – > public static Table<tblCaseNotesMaintItem> GetCNTable() { return dcCaseNotes.GetTable<tblCaseNotesMaintItem>(); } 编辑2 这是我的代码现在看起来像但仍然没有去.就像ItemCount永远不会填充…. // Load Contact Type Data for this CaseNote using (var contactTypeDT = CurrentCaseNote.GetCNoteContactType(cNoteID)) { if (contactTypeDT.Rows.Count > 0) foreach (DataRow row in contactTypeDT.Rows) { LoadContactTypeData(row); } } } private void LoadContactTypeData(DataRow row) { // This does not work var theItem = row["ItemID"]; for (int i = 0; i < chkContactType.ItemCount; i++) { if(theItem == chkContactType.GetItemValue(i)) chkContactType.SetItemChecked(i,true); } } 解决方法
这似乎有效:
int index = checkedListBox1.Items.IndexOf("42"); checkedListBox1.SetItemChecked(index,true); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |