C# 在选中列表框中获取具有值的索引

C# 在选中列表框中获取具有值的索引,c#,winforms,data-binding,devexpress,checkedlistbox,C#,Winforms,Data Binding,Devexpress,Checkedlistbox,实际上,当我单步执行代码时,我发现chkContactType.Items是空的。我甚至在chkContactType.Items.Count中添加了一块手表,它只不过是0。我现在非常困惑,因为显然不是因为我的Insert方法工作得很好,它使用相同的框并为每个项插入值成员 我有一些选中列表框控件,需要根据项值设置CheckState,因为这是存储在数据库中的现有记录的值。不幸的是,我只看到了一种通过未存储的索引来设置的方法。该索引是控件的本地索引,因此,例如,控件ContactType中有15

实际上,当我单步执行代码时,我发现
chkContactType.Items
是空的。我甚至在chkContactType.Items.Count中添加了一块手表,它只不过是0。我现在非常困惑,因为显然不是因为我的Insert方法工作得很好,它使用相同的框并为每个项插入值成员


我有一些选中列表框控件,需要根据项值设置CheckState,因为这是存储在数据库中的现有记录的值。不幸的是,我只看到了一种通过未存储的索引来设置的方法。该索引是控件的本地索引,因此,例如,控件ContactType中有15项。指数为0-14。项目价值分别为39,40,41,42,43,44,45,46,47,48,49,50207720782079。如何使用值成员值获取索引值,或使用值成员值设置每个返回项的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);
    }
编辑以回应评论 这就是我填充选中列表框的方式。我知道那里有一个“神奇的数字”。我正在努力。它与ContactType数据库中的类别ID有关

 // Contact Type Check List Box
        chkContactType.DataSource = CurrentCaseNote.GetMaintItems(1);
        chkContactType.DisplayMember = "ItemDescription";
        chkContactType.ValueMember = "ItemID";
然后是CurrentCaseNote BLL(有点)-->

publicstaticdatatable GetMaintItems(int-iCat)
{
IQueryable tItems=CaseNoteDAL.GetCNTable();
return(tItems.Where(item=>item.CategoryID==iCat&item.IsActive).OrderBy(
item=>item.OrderID).Select(item=>new{item.ItemID,item.ItemDescription})).copylinqtodatable();
}
最后是DAL-->

公共静态表GetCNTable()
{
返回dcCaseNotes.GetTable();
}
编辑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);
        }
    }
//加载此案例的联系人类型数据注释
使用(var contactTypeDT=CurrentCaseNote.GetCNoteContactType(cNoteID))
{
如果(contactTypeDT.Rows.Count>0)
foreach(contactTypeDT.Rows中的数据行)
{
LoadContactTypeData(行);
}
}
}
私有void LoadContactTypeData(数据行)
{
//这行不通
var-Iteem=行[“项目ID”];
对于(int i=0;i
这似乎有效:

int index = checkedListBox1.Items.IndexOf("42");
checkedListBox1.SetItemChecked(index, true);

我也面临同样的问题

checkedListBox1.Items.IndexOf(“值”)的索引总是
-1

我使用以下代码成功地获得了索引

for (int i = 0; i < checkedListBox1.Items.Count; i++)   
{    
   if (((System.Data.DataRowView)(checkedListBox1.Items[i])).Row.ItemArray[0].ToString() == "Value")    

   checkedListBox1.SetItemCheckState(i, CheckState.Checked);    
}
for(int i=0;i
如何填充checkedlistbox控件?我也这么认为。我想知道我的问题是否在别处,当我一步一步地浏览代码时,它看起来就像checkedListBox。Items是空的……您是否已将它绑定到绑定数据源?这可能不会填充Items属性。您可能必须通过绑定数据源的接口才能找到所需的索引。
int index = checkedListBox1.Items.IndexOf("42");
checkedListBox1.SetItemChecked(index, true);
                For j As Integer = 0 To chklst_distributorlist.Items.Count - 1

                    If chklst_distributorlist.GetItemText(chklst_distributorlist.Items.Item(j)) = ds1.Tables(0).Rows(0)("suppliername").ToString Then

                        chklst_distributorlist.SetSelected(j, True)
                        chklst_distributorlist.SetItemCheckState(j, CheckState.Checked)
                    End If
                Next
for (int i = 0; i < checkedListBox1.Items.Count; i++)   
{    
   if (((System.Data.DataRowView)(checkedListBox1.Items[i])).Row.ItemArray[0].ToString() == "Value")    

   checkedListBox1.SetItemCheckState(i, CheckState.Checked);    
}