Я нахожу, что chkContactType.Items
пусто, когда я перешагиваю код. Я даже добавил Watch к chkContactType.Items.Count
, и это никогда не что иное, как 0. Я сейчас сильно запутался, поскольку это, очевидно, не так, как мой метод Insert отлично работает, который использует те же самые блоки и вставляет Value Value для каждого элемента ... .
У меня есть некоторые проверенные элементы управления списком, которые мне нужно установить CheckState на основе значения элемента, поскольку именно это хранится в БД для ожидающей записи. К сожалению, я вижу только способ установить это по индексу, который не сохраняется. Индекс является локальным для элемента управления, поэтому, например, элемент управления ContactType содержит 15 элементов. Индекс 0-14. Стоимость предмета составляет 39,40,41,42,43,44,45,46,47,48,49,50,2077,2078,2079 соответственно. Как я могу получить значение индекса со значением Value Member ИЛИ установить контрольное состояние каждого возвращаемого элемента со значением Value Member?
Спасибо
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. Я знаю, что там есть «магическое число». Я работаю над этим. Это относится к CategoryID в БД ContactType.
// 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);
}
}