Example #1
0
        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;
                }
            }
        }