Ejemplo n.º 1
0
        internal IDictionary <string, object> GetColumnValuesFromRoute(HttpContextBase context)
        {
            RouteValueDictionary        values      = DynamicDataRouteHandler.GetRequestContext(context).RouteData.Values;
            Dictionary <string, object> dictionary2 = new Dictionary <string, object>();

            foreach (MetaColumn column in this.Columns)
            {
                if (Misc.IsColumnInDictionary(column, values))
                {
                    MetaForeignKeyColumn column2 = column as MetaForeignKeyColumn;
                    if (column2 != null)
                    {
                        foreach (string str in column2.ForeignKeyNames)
                        {
                            dictionary2[str] = values[str];
                        }
                    }
                    else
                    {
                        dictionary2[column.Name] = Misc.ChangeType(values[column.Name], column.ColumnType);
                    }
                }
            }
            return(dictionary2);
        }
        internal static IEnumerable<Parameter> GetForeignKeyParameters(MetaForeignKeyColumn fkColumn) {
            Debug.Assert(fkColumn.ForeignKeyNames.Count == fkColumn.ParentTable.PrimaryKeyColumns.Count);
            var result = new List<Parameter>();
            for (int i = 0; i < fkColumn.ForeignKeyNames.Count; i++) {
                string name = fkColumn.ForeignKeyNames[i];
                string value = Misc.GetRouteValue(name);

                MetaColumn parentTablePKColumn = fkColumn.ParentTable.PrimaryKeyColumns[i];

                var param = CreateParameter(name, value, parentTablePKColumn);
            
                result.Add(param);
            }
            return result;
        }
        internal static IEnumerable <Parameter> GetForeignKeyParameters(MetaForeignKeyColumn fkColumn)
        {
            Debug.Assert(fkColumn.ForeignKeyNames.Count == fkColumn.ParentTable.PrimaryKeyColumns.Count);
            var result = new List <Parameter>();

            for (int i = 0; i < fkColumn.ForeignKeyNames.Count; i++)
            {
                string name  = fkColumn.ForeignKeyNames[i];
                string value = Misc.GetRouteValue(name);

                MetaColumn parentTablePKColumn = fkColumn.ParentTable.PrimaryKeyColumns[i];

                var param = CreateParameter(name, value, parentTablePKColumn);

                result.Add(param);
            }
            return(result);
        }
Ejemplo n.º 4
0
        protected void GridDetailDataSource_Selecting(object sender, Microsoft.AspNet.EntityDataSource.EntityDataSourceSelectingEventArgs e)
        {
            GridDataItem parentItem     = ((GridNestedViewItem)e.DataSource.NamingContainer).ParentItem;
            int          hierarchyIndex = parentItem != null ? parentItem.ItemIndex : -1;

            if (hierarchyIndex == -1)
            {
                e.Cancel = true;
                return;
            }

            MetaTable masterMetaTable = GridDataSource.GetTable();
            MetaTable detailMetaTable = e.DataSource.GetTable();

            StringBuilder sb = new StringBuilder();

            sb.Append(Helpers.PersianSearchDataSourceHelpers.GetValidUniCodeQuery(e.DataSource.Where));
            if (masterMetaTable.ForeignKeyColumnsNames != string.Empty)
            {
                //Many to One relation
                foreach (MetaColumn column in detailMetaTable.PrimaryKeyColumns)
                {
                    foreach (string name in masterMetaTable.ForeignKeyColumnsNames.Split(','))
                    {
                        string        columnName     = ((MetaForeignKeyColumn)masterMetaTable.GetColumn(name)).ForeignKeyNames.Where(n => n == name + "." + column.Name).FirstOrDefault();
                        GridTableView ownerTableView = ((GridNestedViewItem)e.DataSource.NamingContainer).OwnerTableView;
                        if (!ownerTableView.DataKeyNames.Contains(columnName))
                        {
                            continue;
                        }
                        if (sb.Length > 0)
                        {
                            sb.Append(" AND ");
                        }
                        sb.AppendFormat("it.{0} = '{1}'", column.Name, ownerTableView.DataKeyValues[hierarchyIndex][columnName]);
                        //break;
                    }
                }
            }
            //else
            //{
            //One to Many relation
            foreach (MetaColumn col in detailMetaTable.Columns)
            {
                if (col is MetaForeignKeyColumn)
                {
                    MetaForeignKeyColumn column = (MetaForeignKeyColumn)col;
                    if (column.ParentTable.Name == masterMetaTable.Name)
                    {
                        int primarykeyindex = 0;                        // in relations witch has mor than one foreign key column
                        foreach (string name in column.ForeignKeyNames) //maybe
                        {
                            GridTableView ownerTableView = ((GridNestedViewItem)e.DataSource.NamingContainer).OwnerTableView;
                            string        columnName     = name;//.Split('.')[1];
                            //if (!ownerTableView.DataKeyNames.Contains(columnName))    //maybe spel of foreignkey in child table does not equla to primary key in parrent table
                            //    continue;
                            switch (masterMetaTable.PrimaryKeyColumns[primarykeyindex].ColumnType.Name)
                            {
                            case "Int16":
                            case "Int32":
                            case "Int64":
                                if (sb.Length > 0)
                                {
                                    sb.Append(" AND ");
                                }
                                sb.AppendFormat("it.{0} = {1}", name, ownerTableView.DataKeyValues[hierarchyIndex][masterMetaTable.PrimaryKeyColumns[primarykeyindex].Name]);          //its depond on our chance witch is the orders of foeign key and parimary in master table should be equal
                                break;

                            default:
                                if (sb.Length > 0)
                                {
                                    sb.Append(" AND ");
                                }
                                sb.AppendFormat("it.{0} = '{1}'", name, ownerTableView.DataKeyValues[hierarchyIndex][masterMetaTable.PrimaryKeyColumns[primarykeyindex].Name]);          //its depond on our chance witch is the orders of foeign key and parimary in master table should be equal
                                break;
                            }
                            primarykeyindex++;
                            //break;
                        }

                        break;
                    }
                }
            }
            //}

            e.DataSource.Where = sb.ToString();
        }
Ejemplo n.º 5
0
    // Use GetTable methods.
    public string GetAdresses(int index)
    {
        // Get the default data model.
        MetaModel model = MetaModel.Default;

        MetaTable mTable;

        switch (index)
        {
        case 0:
            // <Snippet41>
            // Get the metatable for the table with the
            // specified entity type.
            mTable = model.GetTable(typeof(CustomerAddress));
            // </Snippet41>
            break;

        case 1:
            // <Snippet42>
            // Get the metatable for the table with the
            // specified table name.
            mTable = model.GetTable("CustomerAddresses");
            // </Snippet42>
            break;

        case 2:
            // <Snippet43>
            // Get the metatable for the table with the
            // specified table name and the specified data
            // context.
            mTable = model.GetTable("CustomerAddresses", typeof(AdventureWorksLTDataContext));
            // </Snippet43>
            break;

        default:
            mTable = model.GetTable(typeof(CustomerAddress));
            break;
        }

        // The following code dislays the actual value
        // (adress) associated with a customer and link
        // to the related Addresses table.
        MetaForeignKeyColumn fkColumn =
            (MetaForeignKeyColumn)mTable.GetColumn("Address");

        Customer row = (Customer)GetDataItem();


        StringBuilder addressList = new StringBuilder();

        foreach (CustomerAddress childRow in row.CustomerAddresses)
        {
            addressList.Append(childRow.AddressType);
            addressList.Append(":<br/>");
            addressList.Append("<a href='");
            addressList.Append(fkColumn.GetForeignKeyDetailsPath(childRow.Address));
            addressList.Append("'>");
            addressList.Append(childRow.Address.AddressLine1);
            addressList.Append("</a><br/><br/>");
        }

        return(addressList.ToString());
    }