Ejemplo n.º 1
0
        } // _TreeNodeToGrid()

        public CswExtJsGrid DataTableToGrid(DataTable DT, bool Editable = false, string GroupByCol = "", CswEnumExtJsXType GroupByColType = null, bool IncludeEditFields = true, Dictionary <string, Type> ColumnTypeOverrides = null)
        {
            string NodeIdColName      = "nodeid";
            string MenuOptionsColName = "menuoptions";
            string gridUniquePrefix   = DT.TableName;

            CswExtJsGrid grid = new CswExtJsGrid(gridUniquePrefix, IncludeEditFields);

            grid.groupfield = GroupByCol;
            grid.title      = DT.TableName;
            if (_CswNbtResources.CurrentNbtUser != null && _CswNbtResources.CurrentNbtUser.PageSize > 0)
            {
                grid.PageSize = _CswNbtResources.CurrentNbtUser.PageSize;
            }

            //CswExtJsGridDataIndex nodeIdDataIndex = new CswExtJsGridDataIndex( gridUniquePrefix, NodeIdColName );
            //{
            //    CswExtJsGridField nodeIdFld = new CswExtJsGridField { dataIndex = nodeIdDataIndex };
            //    grid.fields.Add( nodeIdFld );
            //    CswExtJsGridColumn nodeIdCol = new CswExtJsGridColumn { header = "nodeId", dataIndex = nodeIdDataIndex, hidden = true };
            //    grid.columns.Add( nodeIdCol );
            //}


            foreach (DataColumn CurrentColumn in DT.Columns)
            {
                Type CurrentColumnType = null;
                if (null != ColumnTypeOverrides)
                {
                    if (false == ColumnTypeOverrides.ContainsKey(CurrentColumn.ColumnName))
                    {
                        CurrentColumnType = CurrentColumn.DataType;
                    }
                    else
                    {
                        CurrentColumnType = ColumnTypeOverrides[CurrentColumn.ColumnName];
                    }
                }
                else
                {
                    CurrentColumnType = CurrentColumn.DataType;
                }


                CswExtJsGridDataIndex dataIndex = new CswExtJsGridDataIndex(gridUniquePrefix, CurrentColumn.ColumnName);
                CswExtJsGridField     fld       = new CswExtJsGridField();
                grid.fields.Add(fld);
                fld.dataIndex = dataIndex;

                CswExtJsGridColumn gridcol = new CswExtJsGridColumn();
                gridcol.header    = CurrentColumn.ColumnName;
                gridcol.dataIndex = dataIndex;
                gridcol.width     = Math.Max(100, (7 + CurrentColumn.ColumnName.Length * 8));

                if ((NodeIdColName.ToLower() == CurrentColumn.ColumnName.ToLower()) || (MenuOptionsColName.ToLower() == CurrentColumn.ColumnName.ToLower()))
                {
                    gridcol.hidden = true;
                }

                if (CurrentColumnType == typeof(string))
                {
                    fld.type = "string";
                }
                else if (CurrentColumnType == typeof(bool))
                {
                    fld.type      = "bool";
                    gridcol.xtype = CswEnumExtJsXType.booleancolumn;
                }
                else if (CurrentColumnType == typeof(Int32) ||
                         (GroupByColType != null &&
                          CurrentColumn.ColumnName.ToLower().Equals(GroupByCol.ToLower()) &&
                          GroupByColType.Equals(CswEnumExtJsXType.numbercolumn)))
                {
                    fld.type       = "number";
                    gridcol.xtype  = CswEnumExtJsXType.numbercolumn;
                    gridcol.Format = "0";
                }
                else if (CurrentColumnType == typeof(DateTime) ||
                         (GroupByColType != null &&
                          CurrentColumn.ColumnName.ToLower().Equals(GroupByCol.ToLower()) &&
                          GroupByColType.Equals(CswEnumExtJsXType.datecolumn)))
                {
                    string userDateFormat = _CswNbtResources.CurrentNbtUser.DateFormat;
                    string userTimeFormat = _CswNbtResources.CurrentNbtUser.TimeFormat;
                    gridcol.dateformat = CswTools.ConvertNetToPHP(userDateFormat) + " " + CswTools.ConvertNetToPHP(userTimeFormat);

                    fld.type       = "date";
                    gridcol.xtype  = CswEnumExtJsXType.datecolumn;
                    gridcol.Format = "m/d/y H:i:s";
                }
                else if (CurrentColumnType == typeof(sbyte))    //sbyte indidcates a "button" column :-(
                {
                    gridcol.xtype        = CswEnumExtJsXType.gridcolumn;
                    gridcol.MenuDisabled = true;
                    gridcol.IsSortable   = false;
                }

                grid.columns.Add(gridcol);
            }

            Int32 RowNo = 0;

            foreach (DataRow Row in DT.Rows)
            {
                CswExtJsGridRow gridrow = new CswExtJsGridRow(RowNo, gridUniquePrefix);

                string NodeIdForGridRowData = string.Empty;
                foreach (DataColumn CurrentColumn in DT.Columns)
                {
                    Type CurrentColumnType = null;
                    if (null != ColumnTypeOverrides)
                    {
                        if (false == ColumnTypeOverrides.ContainsKey(CurrentColumn.ColumnName))
                        {
                            CurrentColumnType = CurrentColumn.DataType;
                        }
                        else
                        {
                            CurrentColumnType = ColumnTypeOverrides[CurrentColumn.ColumnName];
                        }
                    }
                    else
                    {
                        CurrentColumnType = CurrentColumn.DataType;
                    }


                    CswExtJsGridDataIndex index = null;

                    index = new CswExtJsGridDataIndex(gridUniquePrefix, CurrentColumn.ColumnName);
                    gridrow.data[index] = CswConvert.ToString(Row[CurrentColumn]);

                    if (Row.Table.Columns.Contains(NodeIdColName) && DBNull.Value != Row[NodeIdColName] && typeof(sbyte) == CurrentColumnType)
                    {
                        string MenuOptions = string.Empty;
                        if (Row.Table.Columns.Contains(MenuOptionsColName))
                        {
                            MenuOptions = Row[MenuOptionsColName].ToString();
                        }

                        NodeIdForGridRowData = Row[NodeIdColName].ToString();
                        CswExtJsGridButton CurrentButton = new CswExtJsGridButton
                        {
                            DataIndex    = index.ToString(),
                            RowNo        = RowNo,
                            MenuOptions  = MenuOptions,
                            SelectedText = CurrentColumn.ColumnName,
                            PropAttr     = NodeIdForGridRowData
                        };                                    //nu the button

                        grid.rowData.btns.Add(CurrentButton); //add the button
                    }//if it's the hi-jacked data tabe that means BUTTON
                }//iterate collumns

                grid.rowData.rows.Add(gridrow);
                RowNo += 1;
            } // foreach( DataRow Row in DT.Rows )

            return(grid);
        } // DataTableToGrid()
Ejemplo n.º 2
0
        } // TreeToJson()

        private void _TreeNodeToGrid(CswNbtView View, ICswNbtTree Tree, CswExtJsGrid grid, CswExtJsGridRow gridrow)
        {
            string gridUniquePrefix = _getUniquePrefix(View);
            Collection <CswNbtTreeNodeProp> ChildProps = Tree.getChildNodePropsOfNode();

            foreach (CswNbtTreeNodeProp Prop in ChildProps)
            {
                // Potential bug here!
                // If the view defines the property by objectclass propname, but the nodetype propname differs, this might break
                CswExtJsGridDataIndex dataIndex = new CswExtJsGridDataIndex(gridUniquePrefix, Prop.PropName);

                bool   IsHidden = Prop.Hidden;
                bool   IsLocked = Tree.getNodeLockedForCurrentPosition();
                string newValue = string.Empty;
                if (false == IsHidden)
                {
                    CswPrimaryKey NodeId = Tree.getNodeIdForCurrentPosition();
                    CswNbtMetaDataNodeTypeProp MetaDataProp = _CswNbtResources.MetaData.getNodeTypeProp(Prop.NodeTypePropId);

                    string oldValue = Prop.Gestalt;
                    if (string.IsNullOrEmpty(oldValue))
                    {
                        oldValue = null;
                    }

                    switch (Prop.FieldType)
                    {
                    case CswEnumNbtFieldType.Button:
                        if (false == IsLocked)
                        {
                            CswNbtFieldTypeRuleButton buttonFTR = (CswNbtFieldTypeRuleButton)MetaDataProp.getFieldTypeRule();
                            grid.rowData.btns.Add(new CswExtJsGridButton
                            {
                                DataIndex    = dataIndex.ToString(),
                                RowNo        = gridrow.RowNo,
                                MenuOptions  = Prop[buttonFTR.MenuOptionsSubField.Column],
                                SelectedText = oldValue ?? Prop.PropName,
                                PropAttr     = new CswPropIdAttr(NodeId, Prop.NodeTypePropId).ToString(),
                                Mode         = String.IsNullOrEmpty(MetaDataProp.DesignNode.getAttributeValueByColumn(CswEnumNbtPropertyAttributeColumn.Extended)) ? "button" : MetaDataProp.DesignNode.getAttributeValueByColumn(CswEnumNbtPropertyAttributeColumn.Extended)
                            });
                        }
                        break;

                    case CswEnumNbtFieldType.File:
                        string LinkUrl = CswNbtNodePropBlob.getLink(Prop.JctNodePropId, NodeId);
                        if (false == string.IsNullOrEmpty(LinkUrl) && false == string.IsNullOrEmpty(oldValue))
                        {
                            newValue = "<a target=\"blank\" href=\"" + LinkUrl + "\">" + (oldValue) + "</a>";
                        }
                        break;

                    case CswEnumNbtFieldType.Image:
                        string ImageUrl = CswNbtNodePropImage.getLink(Prop.JctNodePropId, NodeId);
                        if (false == string.IsNullOrEmpty(ImageUrl))
                        {
                            newValue = "<a target=\"blank\" href=\"" + ImageUrl + "\">" + (oldValue ?? "Image") + "</a>";
                        }
                        break;

                    case CswEnumNbtFieldType.Link:

                        //string Href = CswNbtNodePropLink.GetFullURL( MetaDataProp.Attribute1, Prop.Field1_Big, MetaDataProp.Attribute2 );
                        string Href = CswNbtNodePropLink.GetFullURL(MetaDataProp.DesignNode.getAttributeValueByColumn(CswEnumNbtPropertyAttributeColumn.Attribute1),
                                                                    Prop.Field1_Big,
                                                                    MetaDataProp.DesignNode.getAttributeValueByColumn(CswEnumNbtPropertyAttributeColumn.Attribute2));
                        if (false == string.IsNullOrEmpty(Href))
                        {
                            newValue = "<a target=\"blank\" href=\"" + Href + "\">" + (oldValue ?? "Link") + "</a>";
                        }
                        break;

                    case CswEnumNbtFieldType.Logical:
                        newValue = CswConvert.ToDisplayString(CswConvert.ToTristate(oldValue));
                        break;

                    case CswEnumNbtFieldType.MOL:
                        string molUrl = CswNbtNodePropMol.getLink(Prop.JctNodePropId, NodeId);
                        if (false == string.IsNullOrEmpty(molUrl))
                        {
                            newValue = "<a target=\"blank\" href=\"" + molUrl + "\">" + "Structure.jpg" + "</a>";
                        }
                        break;

                    default:
                        newValue = oldValue;
                        break;
                    }
                }
                gridrow.data[dataIndex] = newValue;
            } // foreach( JObject Prop in ChildProps )

            // Recurse, but add properties of child nodes to the same gridrow
            for (Int32 c = 0; c < Tree.getChildNodeCount(); c++)
            {
                Tree.goToNthChild(c);
                _TreeNodeToGrid(View, Tree, grid, gridrow);
                Tree.goToParentNode();
            }
        } // _TreeNodeToGrid()