2009-04-29 9 views
0

J'essaie de transmettre un tableau de valeurs dans un tableau d'un objet table afin de pouvoir les écrire dans la base de données.Problème lors de la transmission d'un tableau de valeur dans un tableau d'objets

Ma base de données ressemble à ceci ->
tblCaseNotes
CaseNoteID | PersonId | etc, etc

tblCaseNotesContactType
rowguid | CaseNoteID | ContactTypeID

tblMaintItems
Itemid | CategoryID

L'itemID de la table Maint est ce qui est écrit dans le tblCaseNotesContactType avec le CaseNoteID actuel. Il peut y avoir plusieurs ContactTypes par CaseNote.

Ce que j'ai à ce jour est un tableau des valeurs du CheckListBox ContactType créé dans mon btnNew_Click événement:

// Contact Type check list box 
int cTypeCount = chkContactType.CheckedItems.Count; 
int [] contactTypes = new int[cTypeCount]; 

// reusable generic counter for looping thru the check lists 
int cMaintCounter = 0; 

foreach (int checkedItem in chkContactType.CheckedIndices) 
{ 
    contactTypes[cMaintCounter] = (int)chkContactType.GetItemValue(checkedItem); 
    cMaintCounter++; 
} 
CurrentCaseNote.AddCNote(Program._CurrentPerson.PersonID, Convert.ToDecimal(tbxTimeSpentUnits.Text), chkIsCaseLog.Checked, Convert.ToDateTime(datContactDate.Text), memContactDetails.Text, contactTypes); 

que je passe alors à mon objet CurrentCaseNote méthode AddCNote.

public static void AddCNote(int personID, decimal tsUnits, bool isCaseLog, DateTime cDate, string cDetails, int[] cTypes) 
{ 
    var caseNoteToAdd = new tblCaseNote 
          { 
           CaseNoteID = Guid.NewGuid(), 
           PersonID = personID, 
           TimeSpentUnits =tsUnits, 
           IsCaseLog =isCaseLog, 
           ContactDate =cDate, 
           ContactDetails =cDetails, 
           InsertDate = DateTime.Now, 
           InsertUser = Environment.UserName 
          }; 

    tblCaseNotesContactType[] cTypeToAdd = new tblCaseNotesContactType[cTypes.Length]; 
    cTypeToAdd[0].CaseNoteID = caseNoteToAdd.CaseNoteID; 
    cTypeToAdd[0].ContactTypeID =cTypes[0]; 
    cTypeToAdd[0].rowguid = Guid.NewGuid(); 

    CaseNoteDAL.addCNote(caseNoteToAdd,cTypeToAdd); 

Il est ensuite passé à la DAL à écrire dans la base de données locale:

public static void addCNote(tblCaseNote caseNote, tblCaseNotesContactType[] cType) 
{ 
    foreach (var type in cType) 
    { 
     caseNote.tblCaseNotesContactTypes.Add(type);    
    } 
    dcCaseNotes.tblCaseNotes.InsertOnSubmit(caseNote); 

    //dcCaseNotes.tblCaseNotes.InsertOnSubmit(caseNoteToAdd); 
    dcCaseNotes.SubmitChanges(); 
} 

Il me donne un NullReferenceException était une erreur non gérée sur cette ligne ->cTypeToAdd[0].CaseNoteID = caseNoteToAdd.CaseNoteID;
Est-ce parce que je ne travaille qu'avec le [0]? Je l'ai juste fait pour simplifier mes tests. Est-ce que quelqu'un peut me donner quelques indications sur où je vais mal ici et ce qui pourrait être à l'origine de l'erreur? Comme vous pouvez le voir à partir de mon code, je suis nouveau à ce sujet et j'apprends à la volée.

Merci,

~ P

Répondre

6

Le problème est que vous avez créé un tableau de types de référence, mais pas peuplèrent.

En d'autres termes, après cette ligne:

tblCaseNotesContactType[] cTypeToAdd = new tblCaseNotesContactType[cTypes.Length]; 

vous avez un tableau de références null - la valeur de chaque élément est nul.

Vous devez ensuite écrire:

cTypeToAdd[0] = new tblCaseNotesContactType(); 

(ou une déclaration similaire) avant de pouvoir commencer à changer ses propriétés.

Une alternative serait d'utiliser un initialiseur d'objet et de le faire dans une instruction (après la création du tableau):

cTypeToAdd[0] = new tblCaseNotesContactType 
{ 
    CaseNoteID = caseNoteToAdd.CaseNoteID, 
    ContactTypeID =cTypes[0], 
    rowguid = Guid.NewGuid() 
}: 
+0

Wow, même un amateur comme moi aurait vu ça! Merci! –

Questions connexes