protected void BuildRelatedRecords(object sender, EventArgs e) { string sourceTable = SourceTables.SelectedValue; object relatedDataSource = null; if (!string.IsNullOrEmpty(sourceTable)) { string sourcePriKeyName = BOL.BusinessObject.GetPrimaryKeyName(sourceTable); int? destPriKey = null; if (!string.IsNullOrEmpty(DestTablePrimaryKey)) { destPriKey = int.Parse(DestTablePrimaryKey); } string destPriKeyName = BOL.BusinessObject.GetPrimaryKeyName(DestTableName); SessionHandler sh = new SessionHandler(Session); int patientId = sh.GetPatientId(); // get a list of all records from dest table with optional relation (filter out self) DataTable relatedTable = RelatedRecordsDa.GetRelatedRecordsByTableAndKey(patientId, DestTableName, destPriKeyName, destPriKey, sourceTable, sourcePriKeyName, false); DataView relatedRecords = relatedTable.DefaultView; // actual records if (destPriKey.HasValue) { // set dest table and dest key to actual values relatedTable.Columns[RelatedRecord.DestTableName].Expression = "'" + DestTableName + "'"; // relatedTable.Columns[RelatedRecord.DestPrimaryKey].Expression = destPriKeyName; // exclude current table relation if (sourceTable == DestTableName) { relatedRecords.RowFilter = sourcePriKeyName + " <> " + destPriKey; } } // eform records (load eform, then update data source with related strengths) else if (IsEform) { XmlDocument eformXML = GetEformXml(); // get a list of currenly associated records to node var eFormTablesAndRelations = rc.GetEformRelatedRecords(eformXML, DestTableName, EformRecordId); if (eFormTablesAndRelations.ContainsKey(sourceTable)) { var sourceTableRelations = eFormTablesAndRelations[sourceTable]; // for each related record, find match data row and update Strength value foreach (var eFormRelatedRecord in sourceTableRelations) { int srcPriKey = eFormRelatedRecord.Key; int strength = eFormRelatedRecord.Value; // check for rows which are realted (i.e.,ProcedureId = SrcPriKey), no need to test SrcTable foreach (DataRow row in relatedTable.Select(sourcePriKeyName + " = " + srcPriKey)) { row[RelatedRecord.RelationStrength] = strength; } } } } // determine if sorting string sortColumn = rc.GetRelatedSortColumn(sourceTable); if (!string.IsNullOrEmpty(sortColumn)) { relatedRecords.Sort = sortColumn + " ASC"; } relatedDataSource = relatedRecords; // build data source, releated records and details if (relatedRecords.Count > 0) { TableRecordsRptr.Visible = true; TableRecordsRptr.DataSource = relatedDataSource; TableRecordsRptr.DataBind(); TableRecordsDetailsRptr.DataSource = relatedDataSource; TableRecordsDetailsRptr.DataBind(); AttributionTableRelationStrengthHeading.Visible = true; RelationStrengthLookup.Visible = true; NoRecordsMsgRow.Visible = false; } else { TableRecordsRptr.Visible = false; AttributionTableRelationStrengthHeading.Visible = false; RelationStrengthLookup.Visible = false; NoRecordsMsgRow.Visible = true; } } }