chkContactType.Items
コードをステップスルーすると、実際にはそれが空であることがわかります。ウォッチを追加しましたchkContactType.Items.Count
が、0以外の何物でもありません。同じボックスを使用して各アイテムに値メンバーを挿入するInsertメソッドが正常に機能するため、明らかにそうではないため、今はひどく混乱しています。
アイテムの値に基づいてCheckStateを設定する必要があるチェックリストボックスコントロールがいくつかあります。これは、既存のレコードのDBに格納されているものです。残念ながら、保存されていないインデックスでこれを設定する方法しかわかりません。インデックスはコントロールに対してローカルであるため、たとえば、コントロールのContactTypeには15個のアイテムが含まれています。インデックスは0〜14です。アイテムの値は、それぞれ39、40、41、42、43、44、45、46、47、48、49、50、2077、2078、2079です。バリューメンバー値でインデックス値を取得するか、バリューメンバー値で各返品アイテムのチェック状態を設定するにはどうすればよいですか?
ありがとう
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のDBのCategoryIDに関連しています。
// Contact Type Check List Box
chkContactType.DataSource = CurrentCaseNote.GetMaintItems(1);
chkContactType.DisplayMember = "ItemDescription";
chkContactType.ValueMember = "ItemID";
次にCurrentCaseNoteBLL(ちょっと)->
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);
}
}