当我单步执行代码时,我实际上发现chkContactType.Items
为空。我甚至为chkContactType.Items.Count
添加了一个Watch,它永远不会是0.我现在非常困惑,因为它显然不是因为我的Insert方法工作正常,它使用这些相同的框并为每个项插入Value Member。 ...
我有一些检查列表框控件,我需要根据项目值设置CheckState,因为这是存储在数据库中的exsiting记录。不幸的是,我只看到了一种通过索引设置它的方法,该索引没有存储。索引是控件的本地索引,因此,例如,控件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 - &gt;
public static Table<tblCaseNotesMaintItem> GetCNTable()
{
return dcCaseNotes.GetTable<tblCaseNotesMaintItem>();
}
这就是我的代码现在的样子,但仍然没有。就像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);
}
}
答案 0 :(得分:11)
这似乎有效:
int index = checkedListBox1.Items.IndexOf("42");
checkedListBox1.SetItemChecked(index, true);
答案 1 :(得分:1)
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
答案 2 :(得分:0)
我也面临同样的问题。
checkedListBox1.Items.IndexOf("value");
的索引始终为-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);
}