加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读