Obtenez de l'indice de la valeur dans la Zone de Liste Vérifiée

Je suis réellement trouver que chkContactType.Items est vide quand je marche à travers le code. J'ai même ajouté une Montre à chkContactType.Items.Count et il n'est jamais rien, mais en 0. Je suis sévèrement confus maintenant qu'il n'est évidemment pas que ma méthode Insert fonctionne bien qui utilise ces mêmes boîtes et insère Membre de la Valeur de chaque élément....


J'ai quelques vérifié les contrôles de zone de liste que j'ai besoin de régler le CheckState basé sur la valeur de l'article, car c'est ce qui est stocké dans la base de données pour une exsiting enregistrement. Malheureusement, je ne vois qu'une façon de régler ce, par index qui n'est pas stocké. L'indice est en local pour le contrôle afin, par exemple, le contrôle ContactType a 15 éléments. L'indice est de 0 à 14 ans. La Valeur de l'article est 39,40,41,42,43,44,45,46,47,48,49,50,2077,2078,2079 respectivement. Comment puis-je obtenir soit la valeur de l'indice avec un Membre de la Valeur de la valeur OU de l'ensemble de la checkstate de chaque article retourné avec Membre de la Valeur de la valeur?

Grâce

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

MODIFIER en réponse au commentaire

C'est comment je remplir l'objet d'une ListBox. Je sais qu'il est un "nombre magique" il. Je suis en train de travailler sur elle. Il se rapporte à la CategoryID dans la DB de ContactType.

 //Contact Type Check List Box
        chkContactType.DataSource = CurrentCaseNote.GetMaintItems(1);
        chkContactType.DisplayMember = "ItemDescription";
        chkContactType.ValueMember = "ItemID";

et puis CurrentCaseNote BLL(un peu)-->

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

et enfin le DAL -->

        public static Table<tblCaseNotesMaintItem> GetCNTable()
    {
        return dcCaseNotes.GetTable<tblCaseNotesMaintItem>();
    }

EDIT 2

C'est ce que mon code ressemble MAINTENANT mais toujours pas aller. C'est comme ItemCount est jamais renseigné....

            //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);
        }
    }
Comment voulez-vous remplir le contrôle checkedlistbox?

OriginalL'auteur Refracted Paladin | 2009-07-10