Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
127 views
Here's the demo I saw, "Edit Form Types":

http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/edit-form-types/defaultcs.aspx?skin=Glow

First, click the radio for "pop up" mode. Then, click "edit" on any row. You'll see a modal form with a dropdown on it. So far so good...

But clicking the dropdown reveals the dropdown's "option" list is z-index'ed behind the modal form - in fact, it's going to be part of what is greyed out from the grid behind the popup. User cannot click on the options (and here, cannot even see them); has to navigate down this list.

I tried IE 10 and also Chrome. Also, this will work in "inline" mode - but then, it would. Z-order *matters* on a popup.

I ran into the problem when doing the same sort of thing as on this demo. Since the demo is broken here, the sample code is just the code on Telerik's own demo.

-- D.R.
Viktor Tachev
Telerik team
 answered on 29 Jan 2015
1 answer
88 views
I have a RadGrid and I want to use one of the column to dynamically add new RadDock but nothing happened. I created a single asp:Button to test my FederationDetailBtnClick method which add dock correctly but the button from grid failed. Help needed!!!

aspx file:
<telerik:RadGrid ID="FederationGrid" runat="server"
        OnNeedDataSource="FederationGrid_NeedDataSource"
        OnItemCreated="FederationGrid_ItemCreated"
        OnItemDataBound="FederationGrid_ItemDataBound">
        <MasterTableView EnableHierarchyExpandAll="true" AutoGenerateColumns="False" TableLayout="Fixed" DataKeyNames="Id">
            <Columns>
                <telerik:GridBoundColumn DataField="Id" HeaderText="Federation Name" UniqueName="FederationId">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Status" HeaderText="Status" UniqueName="Status">
                </telerik:GridBoundColumn>
                <telerik:GridButtonColumn HeaderText="Federation Detail" Text="Detail" UniqueName="FederationDetail" ButtonType="PushButton">
                </telerik:GridButtonColumn>
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
 
    <telerik:RadAjaxPanel ID="RadAjaxPanel" runat="server" LoadingPanelID="RadAjaxLoadingPanel">
        <telerik:RadDockLayout runat="server" ID="RadDockLayout_Federation"
            OnSaveDockLayout="RadDockLayout_SaveDockLayout"
            OnLoadDockLayout="RadDockLayout_LoadDockLayout">
            <telerik:RadDockZone ID="RadDockZone_Federation" runat="server" Orientation="Horizontal">
            </telerik:RadDockZone>
        </telerik:RadDockLayout>
    </telerik:RadAjaxPanel>

aspx.cs file:
private List<DockState> CurrentDockStates
        {
            get
            {
                // Store the info about the added docks in the session.
                List<DockState> _currentDockStates = (List<DockState>)Session["CurrentDockStatesDeployment"];
                if (Object.Equals(_currentDockStates, null))
                {
                    _currentDockStates = new List<DockState>();
                    Session["CurrentDockStatesDeployment"] = _currentDockStates;
                }
                return _currentDockStates;
            }
            set
            {
                Session["CurrentDockStatesDeployment"] = value;
            }
        }
 
        protected void Page_Load(object sender, EventArgs e)
        {
             
        }
 
        protected void FederationGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            this.federationList = DataModelRequestHandler.GetFederationsAsync(this.environment);
            FederationGrid.DataSource = this.federationList;
        }
 
        protected void FederationGrid_ItemCreated(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem dataitem = (GridDataItem)e.Item;
                Button btn = (Button)dataitem["FederationDetail"].Controls[0];
                btn.Click += new EventHandler(FederationDetailBtnClick);
            }
        }
 
        protected void FederationGrid_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem dataitem = (GridDataItem)e.Item;
                Button btn = (Button)dataitem["FederationDetail"].Controls[0];
                btn.CommandArgument = (e.Item as GridDataItem)["FederationId"].Text;
            }
        }
 
        protected void RadDockLayout_LoadDockLayout(object sender, DockLayoutEventArgs e)
        {
            // Populate the event args with the state information. The RadDockLayout control
            // will automatically move the docks according that information.
            foreach (DockState state in CurrentDockStates)
            {
                e.Positions[state.UniqueName] = state.DockZoneID;
                e.Indices[state.UniqueName] = state.Index;
            }
        }
 
        protected void RadDockLayout_SaveDockLayout(object sender, DockLayoutEventArgs e)
        {
            CurrentDockStates = RadDockLayout_Federation.GetRegisteredDocksState();
        }
 
        private void FederationDetailBtnClick(object sender, EventArgs e)
        {
            var btnView = (Button)sender;
            var FederationId = btnView.CommandArgument;
 
            // Create RadDock
            RadDock dock = this.CreateRadDock(FederationId);
            // Dock it on DockZone
            RadDockLayout_Federation.Controls.Add(dock);
            dock.Dock(RadDockZone_Federation);
        }
 
        private RadDock CreateRadDock(string dockTitle)
        {
            RadDock dock = new RadDock();
            dock.DockMode = DockMode.Docked;
            dock.UniqueName = Guid.NewGuid().ToString().Replace("-", "a");
            dock.ID = string.Format("RadDock{0}", dock.UniqueName);
            dock.Title = dockTitle;
 
            dock.Commands.Add(new DockCloseCommand());
            dock.Commands.Add(new DockExpandCollapseCommand());
 
            return dock;
        }

Slav
Telerik team
 answered on 29 Jan 2015
1 answer
131 views
As you can see from the attached screenshot, I have added a column to display the number of files in a folder.
Is it possible to add a field to the FileExplorer which will display the number of folders and files in the Current directory, rather than showing totals for all directories?

Vessy
Telerik team
 answered on 29 Jan 2015
9 answers
2.6K+ views

I am using RadBinaryImage control with SqlDataSource. If the VarBinary field contains a NULL value I am getting this error:  â€œUnable to cast object of type 'System.DBNull' to type 'System.Byte[]' â€œ.

My understanding is that a NULL field should be cast to  a null or empty byte[].

Can someone please show me how check if the supplied value is of type DBNull and how to change it to appropriate empty byte array or null in C#?


Thanks,
Thomas
syeada sanjida
Top achievements
Rank 1
 answered on 29 Jan 2015
4 answers
146 views
Hi, I'm having two issues and I suspect at least one of them is dead-simple and caused by me making a simple mistake with me AutoCompleteBox in the EditItemTemplate of a GridTemplateColumn.

First problem; When I enter edit mode for a grid row, the AutoCompleteBox is empty rather than displaying the value that showed in that column before it entered edit mode. (I can "<%#DataBinder.Eval(Container.DataItem, "PartNumber")%>" in the EditItemTemplate to get the text to show up under/over the but that's not a solution.

Second problem; The AutoCompleteBox (set to single selection mode and text input) was appending a semicolon to the selected value. So I tried setting Delimiter="" which got rid of the unwanted character, but then it messed up the auto-complete functionality. Once that change was made, the drop-down options would appear if I paste a string into the box all at once, but not ever if I just typed the same string in. So, either: what's the right way to eliminate the semicolon, or how do I make the autocomplete function work right with delimiter set to an empty string? (I could theoretically trim the semicolon when I'm setting the value of the parameter before updating the DB, but that's a terrible solution since I might theoretically want semicolons in the PartNumber at some future date.)

                        <telerik:GridTemplateColumn UniqueName="PartNumber" HeaderText="Part Number" ItemStyle-CssClass="editWidth" 
                                FilterControlAltText="Filter PartNumber column" FilterControlWidth="85%">
                            <ItemTemplate><%#DataBinder.Eval(Container.DataItem, "PartNumber")%></ItemTemplate>
                            <EditItemTemplate>
                                <telerik:RadAutoCompleteBox runat="server" ID="racbPN" DataSourceID="ItemIdSource" DataTextField="IMA_ItemID" 
                                    HighlightFirstMatch="true" InputType="Text" TextSettings-SelectionMode="Single" MaxResultCount="200" MinFilterLength="4" 
                                     Delimiter="" DropDownHeight="300px" DropDownWidth="200px">
                                </telerik:RadAutoCompleteBox>
                            </EditItemTemplate>
                            <HeaderStyle Width="190px"></HeaderStyle>
                        </telerik:GridTemplateColumn>

Thanks for your time!
Nencho
Telerik team
 answered on 29 Jan 2015
5 answers
62 views
I am using the telerik ajax controls with an asp.net 4.0 website.  The default page is using the radajaxmanager control.  The page also has two radcombobox controls.  Server side OnItemsRequested events are used to populate the rad combo box controls.  A rad multipage control is also on the page.  Each page in the rad multi page displays rad grids based on the selections for the two rad combo box controls.  Session state is used to store the selections from the two radcombobox controls.  Object datasources use these session variables to populate the grids.

The problem is that a user can leave the website without closing the browser and then return to the website using a back button or favorite item.  The combo boxes to not show the previous selections.  However, the grids use the session variables to display the data.  I have been unable to set the radcombobox values.  It appears that th page load event does not fire.

I cannot remove the rad ajax manager because a tab strip control is also used.  The page needs javascript methods to control the tabs.

Do you have any suggestions?
Nencho
Telerik team
 answered on 29 Jan 2015
1 answer
199 views
I would like to create the diagram that
  • User can drag & drop the item (Image) into the diagram.
  • User can create the connection to link each item.
  • User can save the diagram into JSON.
  • User can load the diagram from JSON

Now, I can archive the first, second and third requirements. However, I have the problem when I try to load data from JSON. The Images are missing, and the connections also lost. I try to solve the problem by using 'visualTemplate' by setting '<ShapeDefaultsSettings Visual="visualTemplate" />', but it breaks my diagram instead. I have attached my code below.

This is my drag & drop event
function setDropTargetOnDiagram(element) {
     $telerik.$(element).kendoDropTarget({
          drop: function (e) {
               var draggable = e.draggable,
                    element = e.dropTarget,
                    diagram = element.getKendoDiagram();
 
               if (draggable && draggable.hint) {
                    var item = draggable.hint.data("data"),
                         offset = draggable.hintOffset,
                         point = new kendo.dataviz.diagram.Point(offset.left, offset.top),
                         transformed = diagram.documentToModel(point);
 
               item.id += "_" + generateUUID();
               item.x = transformed.x;
               item.y = transformed.y;
 
               var shape = createCustomShape(item);                               
             diagram.addShape(shape);
               }
          }
     });
}
 
function createCustomShape(item) {
     var shape = new kendo.dataviz.diagram.Shape(item);
     var image = new kendo.dataviz.diagram.Image({
          source: "../Images/Diagram/" + item.content.ImageName,
          x: 0,
          y: 0,
          width: item.width,
          height: item.height,
          stroke: {
               width: 0
          }
     });
     var textBlock = new kendo.dataviz.diagram.TextBlock({
          text: item.content.CustomText,
               color: "#000",
               fontSize: 12,
               x: item.content.TextX,
               y: item.content.TextY
     });
 
     shape.visual.append(image);
     shape.visual.append(textBlock);
 
     return shape;
}

This is my dragItem
<div class="dragItem" data-data='{"id": "StartProcess", "content": {"CustomText":"Start", "TextX":"18", "TextY":"70", "ImageName":"64Play.png"}, "width":"64", "height":"64"}'>
     <asp:Image ID="imgPersonal" runat="server" ImageUrl="~/Images/Diagram/64Play.png" />
</div>

This is the code for Save and Load JSON
function saveJSON() {
     var json = diagram.save();
     var jsonStr = Sys.Serialization.JavaScriptSerializer.serialize(json);
      
     var txtDiagramSave= document.getElementById("txtDiagramSave");
     txtDiagramSave.value = js_beautify(jsonStr);
}
 
function loadJSON() {
     var txtDiagramSave= document.getElementById("txtDiagramSave");
     diagram.load(Sys.Serialization.JavaScriptSerializer.deserialize(txtDiagramSave.value));
}

This is my saved JSON
{
    "shapes": [{
        "id": "StartProcess_1242084a-6aa2-4320-8b89-accf2cd22f25",
        "hover": {},
        "cursor": "pointer",
        "content": {
            "align": "center middle",
            "text": "",
            "CustomText": "Start",
            "TextX": "18",
            "TextY": "70",
            "ImageName": "64Play.png"
        },
        "selectable": true,
        "serializable": true,
        "enable": true,
        "type": "rectangle",
        "path": "",
        "autoSize": true,
        "visual": null,
        "x": 134,
        "y": 104,
        "minWidth": 20,
        "minHeight": 20,
        "width": 65,
        "height": 65,
        "editable": {
            "connect": true
        },
        "connectors": [{
            "name": "Top",
            "description": "Top Connector"
        }, {
            "name": "Right",
            "description": "Right Connector"
        }, {
            "name": "Bottom",
            "description": "Bottom Connector"
        }, {
            "name": "Left",
            "Description": "Left Connector"
        }, {
            "name": "Auto",
            "Description": "Auto Connector"
        }],
        "rotation": {
            "angle": 0
        },
        "undoable": false
    }, {
        "id": "Personal_3993f4ff-956e-4d46-a939-18c84fcb4162",
        "hover": {},
        "cursor": "pointer",
        "content": {
            "align": "center middle",
            "text": "",
            "CustomText": "Personal",
            "TextX": "8",
            "TextY": "70",
            "ImageName": "64ManPencil.png"
        },
        "selectable": true,
        "serializable": true,
        "enable": true,
        "type": "rectangle",
        "path": "",
        "autoSize": true,
        "visual": null,
        "x": 295,
        "y": 99,
        "minWidth": 20,
        "minHeight": 20,
        "width": 65,
        "height": 65,
        "editable": {
            "connect": true
        },
        "connectors": [{
            "name": "Top",
            "description": "Top Connector"
        }, {
            "name": "Right",
            "description": "Right Connector"
        }, {
            "name": "Bottom",
            "description": "Bottom Connector"
        }, {
            "name": "Left",
            "Description": "Left Connector"
        }, {
            "name": "Auto",
            "Description": "Auto Connector"
        }],
        "rotation": {
            "angle": 0
        },
        "undoable": false
    }],
    "connections": [{
        "from": {
            "id": "StartProcess_1242084a-6aa2-4320-8b89-accf2cd22f25"
        },
        "to": {
            "id": "Personal_3993f4ff-956e-4d46-a939-18c84fcb4162"
        },
        "id": "h4upyHsjPm",
        "hover": {
            "stroke": {}
        },
        "cursor": "pointer",
        "content": {
            "align": "center middle",
            "text": "",
            "color": "#444444"
        },
        "selectable": true,
        "serializable": true,
        "enable": true,
        "startCap": "none",
        "endCap": "ArrowEnd",
        "points": [],
        "stroke": {
            "width": 2,
            "color": "#6c6c6c"
        },
        "selection": {
            "handles": {
                "width": 8,
                "height": 8,
                "fill": {
                    "color": "white"
                },
                "stroke": {
                    "color": "#444444"
                }
            }
        }
    }]
}

However, after I loaded the saved JSON, it was changed to be like this. (I lost the showing images, and connection is blank)
{
    "shapes": [{
        "id": "StartProcess_1242084a-6aa2-4320-8b89-accf2cd22f25",
        "hover": {
            "opacity": 0.2
        },
        "cursor": "pointer",
        "content": {
            "align": "center middle",
            "text": "",
            "color": "#444444",
            "CustomText": "Start",
            "TextX": "18",
            "TextY": "70",
            "ImageName": "64Play.png"
        },
        "selectable": true,
        "serializable": true,
        "enable": true,
        "type": "rectangle",
        "path": "",
        "autoSize": true,
        "visual": null,
        "x": 134,
        "y": 104,
        "minWidth": 20,
        "minHeight": 20,
        "width": 65,
        "height": 65,
        "editable": {
            "connect": true
        },
        "connectors": [{
            "name": "Top",
            "description": "Top Connector"
        }, {
            "name": "Right",
            "description": "Right Connector"
        }, {
            "name": "Bottom",
            "description": "Bottom Connector"
        }, {
            "name": "Left",
            "Description": "Left Connector"
        }, {
            "name": "Auto",
            "Description": "Auto Connector"
        }],
        "rotation": {
            "angle": 0
        },
        "stroke": {
            "width": 0
        },
        "fill": {
            "color": "#4cc5da"
        },
        "connectorDefaults": {
            "fill": {
                "color": "#444444"
            },
            "stroke": {
                "color": "white"
            },
            "hover": {
                "fill": {
                    "color": "white"
                },
                "stroke": {
                    "color": "#444444"
                }
            }
        },
        "undoable": false
    }, {
        "id": "Personal_3993f4ff-956e-4d46-a939-18c84fcb4162",
        "hover": {
            "opacity": 0.2
        },
        "cursor": "pointer",
        "content": {
            "align": "center middle",
            "text": "",
            "color": "#444444",
            "CustomText": "Personal",
            "TextX": "8",
            "TextY": "70",
            "ImageName": "64ManPencil.png"
        },
        "selectable": true,
        "serializable": true,
        "enable": true,
        "type": "rectangle",
        "path": "",
        "autoSize": true,
        "visual": null,
        "x": 295,
        "y": 99,
        "minWidth": 20,
        "minHeight": 20,
        "width": 65,
        "height": 65,
        "editable": {
            "connect": true
        },
        "connectors": [{
            "name": "Top",
            "description": "Top Connector"
        }, {
            "name": "Right",
            "description": "Right Connector"
        }, {
            "name": "Bottom",
            "description": "Bottom Connector"
        }, {
            "name": "Left",
            "Description": "Left Connector"
        }, {
            "name": "Auto",
            "Description": "Auto Connector"
        }],
        "rotation": {
            "angle": 0
        },
        "stroke": {
            "width": 0
        },
        "fill": {
            "color": "#4cc5da"
        },
        "connectorDefaults": {
            "fill": {
                "color": "#444444"
            },
            "stroke": {
                "color": "white"
            },
            "hover": {
                "fill": {
                    "color": "white"
                },
                "stroke": {
                    "color": "#444444"
                }
            }
        },
        "undoable": false
    }],
    "connections": []
}

I try to solve the load JSON problem by using "visualTemplate" like this, but it breaks the diagram
function visualTemplate(options) {
     var diagram = kendo.dataviz.diagram;
     var g = new diagram.Group();
     var dataItem = options.dataItem;
 
     g.append(createCustomShape(dataItem));
     return g;
};


Slav
Telerik team
 answered on 29 Jan 2015
3 answers
117 views
Hello,

I'm using a Masterpage with .NET 4.0 and a RadSkinManager. Without obviously changing anything in the masterpage, I'm getting a NRE in one of my 3 content pages. The question is why is this only happening in one page and how to get RadSkinManager applied continously to all content pages?
My masterpage head is the following:
<head id="Head1" runat="server">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <telerik:RadSkinManager ID="rsm" runat="server" Skin="WebBlue"></telerik:RadSkinManager>
  <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
  <asp:ContentPlaceHolder ID="HeadContent" runat="server"></asp:ContentPlaceHolder>
</head>

The error:
[NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.]
   Telerik.Web.UI.RadSkinManager.Page_PreRender(Object sender, EventArgs e) +67
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.Control.OnPreRender(EventArgs e) +92
   System.Web.UI.Control.PreRenderRecursiveInternal() +83
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974
Peter Filipov
Telerik team
 answered on 29 Jan 2015
1 answer
114 views
Hi all,

I am dynamically generating a RadGrid from code behind, which was perfectly working of retrieving the RadGrid Item data for hidden columns.

But, now I need to upgrade telerik version from "2011.1.413.35" to "2014.3.1209.35".

After doing this upgrade, the above method of retrieving the RadGrid Item data for hidden columns is not working, in other ways I am getting &nbsp; in place of the value.

Here is my sample code to create grid:
I am putting xmldatasource to fill the RadGrid.

radGrid.MasterTableView.Columns.Add(_CreateColumn("ID", "", Unit.Percentage(0), false));

private GridBoundColumn _CreateColumn(string dataField, string text, Unit width, Boolean readOnly)
    {
        GridBoundColumn boundColumn = new GridBoundColumn();

        boundColumn.DataField           = dataField;
        boundColumn.HeaderText          = text;
        boundColumn.SortExpression      = boundColumn.DataField;
        boundColumn.HeaderStyle.Width   = width;
        boundColumn.ReadOnly            = readOnly;
        boundColumn.Visible             = (width.Value == 0 ? false : true);

        return boundColumn;
    }.

Sample code to retrieve item value:
RadGrid radGrid = (RadGrid)control;
foreach (GridDataItem grdItem in radGrid.Items)
{
     string ID = grdItem["ID"].Text;
}

But the ID = &nbsp;   which should be some value which I filled though xmldatasource.

Please provide some bunch of code or any kind of help will be appreciated.

Maria Ilieva
Telerik team
 answered on 29 Jan 2015
2 answers
86 views
Hi,

I am using a RadTreeList control and I want to set the selected property (checkbox) of a row, depending on a value from the datasource.
This is my code:

<telerik:RadTreeList ID="lstAanbod" runat="server" CssClass="_radgrid" OnNeedDataSource="lstAanbod_NeedDataSource" DataKeyNames="NR" ParentDataKeyNames="PARENT_NR" ClientDataKeyNames="DOSSIER_ID, PROFIEL_ID, GESELECTEERD"  EnableEmbeddedSkins="false" BorderStyle="None" GridLines="None" ShowFooter="true" AutoGenerateColumns="false" AllowMultiItemSelection="true">
    <ItemStyle HorizontalAlign="Left"></ItemStyle>
    <Columns>
        <telerik:TreeListSelectColumn HeaderStyle-Width="38px" UniqueName="SelectColumn"></telerik:TreeListSelectColumn>                   
        <telerik:TreeListBoundColumn HeaderStyle-Width="10%" DataField="CODE" HeaderText="Code"></telerik:TreeListBoundColumn>
        <telerik:TreeListBoundColumn HeaderStyle-Width="60%" DataField="TITEL" HeaderText="Titel"></telerik:TreeListBoundColumn>
        <telerik:TreeListBoundColumn HeaderStyle-Width="10%" DataField="NIVEAU" HeaderText="Niveau"></telerik:TreeListBoundColumn>
        <telerik:TreeListBoundColumn HeaderStyle-Width="10%" DataField="DOSSIER_ID" HeaderText="Niveau" Visible="false"></telerik:TreeListBoundColumn>
        <telerik:TreeListBoundColumn HeaderStyle-Width="10%" DataField="PROFIEL_ID" HeaderText="Niveau" Visible="false"></telerik:TreeListBoundColumn>     
    </Columns>         
    <ClientSettings Selecting-AllowItemSelection="true" Selecting-UseSelectColumnOnly="true" Selecting-AllowToggleSelection="true" ClientEvents-OnItemSelected="OnClientNodeSelected" ClientEvents-OnTreeListCreated="treeListCreated"></ClientSettings>     
</telerik:RadTreeList>


function UpdateAllChildren(currNode, nodes, nodecount, checked) {           
    var i;
    for (i = 0; i < nodecount; i++) {
        if (checked) {
            nodes[i].set_selected(true);
        }
        else {
            nodes[i].set_selected(false);
        }
    }
}
 
function treeListCreated(sender, args) {
    var items = sender.get_dataItems();
     
    for (var i = 0; i < items.length; i++) {
        var item = items[i];               
        if (item.get_dataKeyValue("GESELECTEERD") == "True") {                   
            item.set_selected(true);
        }
    }
}

However, when I run my page, I get an error on the line 'item_set_selected(true)' :

Unhandled exception at line 808, column 27 in http://localhost:11488/ScriptResource.axd? ...
0x800a138f - Runtime-fout JavaScript: Unable to get property '_selectedIndexes' of undefined or null referenced

What am I doing wrong?
Kostadin
Telerik team
 answered on 29 Jan 2015
Narrow your results
Selected tags
Tags
+? more
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?