/// <summary> /// Returns a CaisisEventHandler which is used for triggering "dirty" functinality for an ICaisisInputControl /// </summary> /// <param name="srcControl"></param> /// <param name="updateEvent"></param> /// <returns></returns> private CaisisEventHandler GetValueChangeEventHandler(ICaisisInputControl srcControl, DxImageFindingEvent updateEvent) { CaisisEventHandler changeEvent = new CaisisEventHandler(delegate(ICaisisInputControl a, EventArgs b) { if (!fieldToUpdateMap.ContainsKey(a)) { fieldToUpdateMap.Add(a, updateEvent); } }); return(changeEvent); }
/// <summary> /// Initalizes variables and attaches event handlers for populating/updating DxImageFindingFields /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InitEvents(object sender, EventArgs e) { List <CaisisCheckBox> checkBoxList = new List <CaisisCheckBox>(IMG_FIND_SUBSITES.Length); // setup event handlers foreach (string bodyPart in IMG_FIND_SUBSITES) { // Main Checkbox for each body part CaisisCheckBox subSiteCheckBox = this.FindControl(bodyPart + "_Check") as CaisisCheckBox; checkBoxList.Add(subSiteCheckBox); CaisisHidden basicSubSiteId = this.FindControl(bodyPart + "_BasicId") as CaisisHidden; string basicFindSubSite = bodyPart; // Populate basic basic image finding by subsite this.PopulateDxImagingField += new DxImageFindingEvent(delegate(int diagnosticId) { // Check if a basic record is found for subsite and set prikey and check box DataRow basicFind = FindDxBoneRecordBasic(diagnosticId, basicFindSubSite); if (basicFind != null) { basicSubSiteId.Value = basicFind[ImageFinding.DxImageFindingId].ToString(); subSiteCheckBox.Checked = true; } }); // Update event for basic image finding by subsite, no ImgFindNew,ImgFindSide or ImgFindAP DxImageFindingEvent basicSubSiteUpdateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { ImageFinding biz = new ImageFinding(); if (subSiteCheckBox.Checked) { if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { biz.Get(int.Parse(basicSubSiteId.Value)); } else { biz[ImageFinding.DiagnosticId] = diagnosticId; } biz[ImageFinding.ImgFindSite] = ImageTypes[0]; biz[ImageFinding.ImgFindSubsite] = basicFindSubSite; biz.Save(); // update prikey field basicSubSiteId.Value = biz[ImageFinding.DxImageFindingId].ToString(); } else { if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { biz.Delete(int.Parse(basicSubSiteId.Value)); // update prikey field basicSubSiteId.Value = string.Empty; } } }); // When subsite checkbox changed, mark as dirty subSiteCheckBox.ValueChanged += GetValueChangeEventHandler(subSiteCheckBox, basicSubSiteUpdateEvent); // DETAIL ORIENTED FIELDS // iterate through specific subsite fields and set update and populate events foreach (string view in IMG_FIND_AP) { foreach (string side in IMG_FIND_SIDES) { CaisisTextBox bodyPartViewSide = this.FindControl(view + "_" + bodyPart + "_" + side) as CaisisTextBox; CaisisHidden bodyPartViewSideId = this.FindControl(view + "_" + bodyPart + "_" + side + "_Id") as CaisisHidden; // Static Values string imgFindAP = view; string imgFindSide = side; string imgFindSubsite = bodyPart; // EVENT HANDLER which populates fields DxImageFindingEvent populateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { // Populate when not posting back DataRow foundBodyPartViewSide = FindDxBoneRecord(diagnosticId, imgFindAP, imgFindSide, imgFindSubsite); if (bodyPartViewSideId != null && foundBodyPartViewSide != null) { // set pri key bodyPartViewSideId.Value = foundBodyPartViewSide[ImageFinding.DxImageFindingId].ToString(); // set textbox value bodyPartViewSide.Value = foundBodyPartViewSide[ImageFinding.ImgFindNew].ToString(); // check box to indicate record found and has value subSiteCheckBox.Checked = true; // COLLECT MORE ACTIVATED CollectMore.Checked = true; } }); // EVENT HANDLER which updates the DxImageFindings table DxImageFindingEvent updateEvent = new DxImageFindingEvent(delegate(int diagnosticId) { // Create new Biz ImageFinding biz = new ImageFinding(); // load record if exists if (!string.IsNullOrEmpty(bodyPartViewSideId.Value)) { int priKey = int.Parse(bodyPartViewSideId.Value); if (!string.IsNullOrEmpty(bodyPartViewSide.Value)) { biz.Get(priKey); } // otherwise, do not save empty ImgFindNew, remove record else { biz.Delete(priKey); return; } } else { // set par key field biz[ImageFinding.DiagnosticId] = diagnosticId; } // set ImgFindNew from text field biz[ImageFinding.ImgFindNew] = bodyPartViewSide.Value; // Get static values from dictionary biz[ImageFinding.ImgFindSite] = ImageTypes[0]; biz[ImageFinding.ImgFindAP] = imgFindAP; biz[ImageFinding.ImgFindSide] = imgFindSide; biz[ImageFinding.ImgFindSubsite] = imgFindSubsite; // save/update record biz.Save(); // update prikeyfield bodyPartViewSideId.Value = biz[ImageFinding.DxImageFindingId].ToString(); // Since we're creating a specific subsite find location, we need to remove generic subsite find record if (!string.IsNullOrEmpty(basicSubSiteId.Value)) { ImageFinding basicFinding = new ImageFinding(); biz.Delete(int.Parse(basicSubSiteId.Value)); // update basic finding field basicSubSiteId.Value = string.Empty; } }); // Attach event for tracking dirty fields bodyPartViewSide.ValueChanged += GetValueChangeEventHandler(bodyPartViewSide, updateEvent);; // Attach events for populating fields this.PopulateDxImagingField += new DxImageFindingEvent(populateEvent); } } } // EVENTS for Total Lesions compared to BASELINE SCAN //// Create populating event which will set hidden field and radio button value if an image finding found //DxImageFindingEvent totalNewLesionsUpdate = new DxImageFindingEvent(delegate(int diagnosticId) // { // DataRow found = FindDxBoneRecord(diagnosticId); // if (found != null) // { // DxTotalNumNewTumors.Value = found[ImageFinding.ImgFindNew].ToString(); // TotalNewLesionsId.Value = found[ImageFinding.DxImageFindingId].ToString(); // } // }); //this.PopulateDxImagingField += new DxImageFindingEvent(totalNewLesionsUpdate); //// Create an update event which is used for updating the total number of lesions //DxImageFindingEvent basicBareUpdate = new DxImageFindingEvent(delegate(int diagnosticId) //{ // ImageFinding biz = new ImageFinding(); // if (!string.IsNullOrEmpty(TotalNewLesionsId.Value)) // { // biz.Get(int.Parse(TotalNewLesionsId.Value)); // } // else // { // biz[ImageFinding.DiagnosticId] = diagnosticId; // } // //biz[ImageFinding.ImgFindNew] = DxTotalNumNewTumors.Value; // biz[ImageFinding.ImgFindNotes] = "New total findings compared to BASELINE SCAN."; // biz[ImageFinding.ImgFindSite] = ImageTypes[0]; // // var q = // //from c in checkBoxList // //let v = c.Value // //where c.Checked // //select v; // //string checkedValues = string.Join(",", checkBoxList.Where(c => c.Checked).Select(c => c.Value).ToArray()); // biz.Save(); //}); //// When chnaging total lesion, trigger dirty field //DxTotalNumNewTumors.ValueChanged += GetValueChangeEventHandler(DxTotalNumNewTumors, basicBareUpdate); }