Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
380 views

I have a radgrid control (with detail tables) on an aspx page . I have button column on the parent and  the child(detail

tables) as well.

Based on some criteria I have to disable/enable the button column on parent and/or the child.
what is the best way to do it?

To explain further, the parent display the order  and when click on the order it shows the order items for the order.
the button column is to duplicate an order. the button on the parent duplicates the whole order. the button on the child

(order items) duplicates an order with that particular order item.
Please advise the best solution,
Thanks

Shinu
Top achievements
Rank 2
 answered on 30 Jun 2011
5 answers
146 views
Hi,

I have one situation where i want to find the header of Grid and apply the custom css. In grid I have following column and want to get the header of this column in code
            <ExpandCollapseColumn Visible="True">
            </ExpandCollapseColumn>
                <telerik:GridTemplateColumn UniqueName="AssociateColumn">
                    <ItemTemplate>
                        <asp:HyperLink ID="Lnktest" runat="server" Text="test"></asp:HyperLink>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>

I have follwoing code to get the header and i am able to get that for other columns but not for this above column.

if (e.Item is GridHeaderItem)
            {
                GridHeaderItem item = (GridHeaderItem)e.Item;
                foreach (GridColumn col in GridAttorney.MasterTableView.Columns)
                {
                    if (col is GridEditCommandColumn || col is GridButtonColumn)
                    {
                        item[col.UniqueName].CssClass = "gridsBlankheadercolumn";
                    }
                }
            }

Can anyone tell me How to get this Column header in this above code ? Also please see the attached screenshot for better understanding.

Thanks,
--Jai
Iana Tsolova
Telerik team
 answered on 30 Jun 2011
1 answer
228 views
hi,

I have a project that has been build on asp.net 2008 (based on vb.net)  and microsoft ajax, now I want to add telerik tree view to the project,
when I have added the component I got too many errors 'ScriptManager' is ambiguous in the namespace 'System.Web.UI'

so any idea how to solve this problem?
Peter
Telerik team
 answered on 30 Jun 2011
4 answers
190 views
Dear Sir:

I want the grid to be 100% height for my web page and my page is resizable. i tried to set 100% height for my grid but it is not working. is there any solution for my simple case?

From CH





CH
Top achievements
Rank 1
 answered on 30 Jun 2011
1 answer
67 views
hi,
i'm wanting to use the multiple file upload feature, but instead of the uploadprogress showing above the "input" button. I'd like to move it inside a listbox item row.

ideally if i added multiple files, i'd like to see each progress for each file show up in its own listbox row.

is this possible, and if so can someone give me some guidance?

thanks
Peter Filipov
Telerik team
 answered on 30 Jun 2011
2 answers
136 views
When using the RadTreeList in the DynamicData ManyToMany_Edit.ascx control, I am getting the following null ref error:

[NullReferenceException: Object reference not set to an instance of an object.] Telerik.Web.UI.TreeListItemDecorator.PrepareDataItemsServiceCells(RadTreeList owner) +534 Telerik.Web.UI.RadTreeList.PrepareRows() +215 Telerik.Web.UI.RadTreeList.Render(HtmlTextWriter writer) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.UI.Control.Render(HtmlTextWriter writer) +10 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.DynamicData.DynamicControl.Render(HtmlTextWriter writer) +154 ...

Here is the code:

 

<%@ Control Language="C#" CodeBehind="ManyToMany_Edit.ascx.cs" Inherits="Ctp.U.Web.ResidentPortal.Forms.ManyToMany_EditField" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<telerik:RadTreeList ID="_radTreeList1" runat="server" OnDataBound="_radTreeList1_DataBound">
</telerik:RadTreeList>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Web.DynamicData;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
 
namespace Ctp.U.Web.ResidentPortal.Forms
{
    public partial class ManyToMany_EditField : System.Web.DynamicData.FieldTemplateUserControl
    {
        public void Page_Load(object sender, EventArgs e)
        {
            // Register for the DataSource's updating event
            EntityDataSource ds = (EntityDataSource)this.FindDataSourceControl();
 
            // This field template is used both for Editing and Inserting
            ds.Updating += new EventHandler<EntityDataSourceChangingEventArgs>(DataSource_UpdatingOrInserting);
            ds.Inserting += new EventHandler<EntityDataSourceChangingEventArgs>(DataSource_UpdatingOrInserting);
        }
 
        void DataSource_UpdatingOrInserting(object sender, EntityDataSourceChangingEventArgs e)
        {
            MetaTable childTable = ChildrenColumn.ChildTable;
 
            // Comments assume employee/territory for illustration, but the code is generic
 
            // Get the collection of territories for this employee
            RelatedEnd entityCollection = (RelatedEnd)Column.EntityTypeProperty.GetValue(e.Entity, null);
 
            // In Edit mode, make sure it's loaded (doesn't make sense in Insert mode)
            if (Mode == DataBoundControlMode.Edit && !entityCollection.IsLoaded)
            {
                entityCollection.Load();
            }
 
            // Get an IList from it (i.e. the list of territories for the current employee)
            // REVIEW: we should be using EntityCollection directly, but EF doesn't have a
            // non generic type for it. They will add this in vnext
            IList entityList = ((IListSource)entityCollection).GetList();
 
            // Go through all the territories (not just those for this employee)
            foreach (object childEntity in childTable.GetQuery(e.Context))
            {
 
                // Check if the employee currently has this territory
                bool isCurrentlyInList = entityList.Contains(childEntity);
 
                // Find the checkbox for this territory, which gives us the new state
                string pkString = childTable.GetPrimaryKeyString(childEntity);
                //ListItem listItem = CheckBoxList1.Items.FindByValue(pkString);
                TreeListDataItem radItem = null;
 
                foreach (TreeListDataItem item in _radTreeList1.Items)
                {
                    if (item["Id"].Text == pkString)
                        radItem = item;
                }
 
                if (radItem == null)
                    continue;
 
                // If the states differs, make the appropriate add/remove change
                if (radItem.Selected)
                {
                    if (!isCurrentlyInList)
                        entityList.Add(childEntity);
                }
                else
                {
                    if (isCurrentlyInList)
                        entityList.Remove(childEntity);
                }
            }
        }
 
        protected void DataBound()
        {
            MetaTable childTable = ChildrenColumn.ChildTable;
 
            // Comments assume employee/territory for illustration, but the code is generic
 
            IList entityList = null;
            ObjectContext objectContext = null;
 
            if (Mode == DataBoundControlMode.Edit)
            {
                object entity;
                ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor;
                if (rowDescriptor != null)
                {
                    // Get the real entity from the wrapper
                    entity = rowDescriptor.GetPropertyOwner(null);
                }
                else
                {
                    entity = Row;
                }
 
                // Get the collection of territories for this employee and make sure it's loaded
                RelatedEnd entityCollection = Column.EntityTypeProperty.GetValue(entity, null) as RelatedEnd;
                if (entityCollection == null)
                {
                    throw new InvalidOperationException(String.Format("The ManyToMany template does not support the collection type of the '{0}' column on the '{1}' table.", Column.Name, Table.Name));
                }
                if (!entityCollection.IsLoaded)
                {
                    entityCollection.Load();
                }
 
                // Get an IList from it (i.e. the list of territories for the current employee)
                // REVIEW: we should be using EntityCollection directly, but EF doesn't have a
                // non generic type for it. They will add this in vnext
                entityList = ((IListSource)entityCollection).GetList();
 
                // Get the current ObjectContext
                // REVIEW: this is quite a dirty way of doing this. Look for better alternative
                ObjectQuery objectQuery = (ObjectQuery)entityCollection.GetType().GetMethod(
                    "CreateSourceQuery").Invoke(entityCollection, null);
                objectContext = objectQuery.Context;
            }
 
            // Go through all the territories (not just those for this employee)
            foreach (object childEntity in childTable.GetQuery(objectContext))
            {
                _radTreeList1.DataKeyNames = new string[] { "Id" };
                _radTreeList1.ParentDataKeyNames = new string[] { "ParentId" };
 
                TreeListDataItem radItem = new TreeListDataItem(_radTreeList1
                    , TreeListItemType.Item
                    , _radTreeList1.Items.Count
                    , true);
 
                radItem.DataItem = childEntity;
 
                // Make it selected if the current employee has that territory
                if (Mode == DataBoundControlMode.Edit)
                {
                    radItem.Selected = entityList.Contains(childEntity);
                }
 
                _radTreeList1.Items.Add(radItem);
            }
        }
 
        protected void _radTreeList1_DataBound(object sender, EventArgs e)
        {
            DataBound();
        }
 
        public override Control DataControl
        {
            get
            {
                return _radTreeList1;
            }
        }
 
    }
}
Radoslav
Telerik team
 answered on 30 Jun 2011
1 answer
32 views
Hi,
I am facing issues while converting my application from classic RadControl to ASP.NET AJAX radcontrol.
My requirement is that on row click of one grid (dgProductGroup in the below code snippet, I need to update dgProduct).
Earliler I was using the below code in my ASPX page:

<radA:RadAjaxManager 
            ID="RadAjaxManager1" 
            runat="server">
        <AjaxSettings>
            <radA:AjaxSetting AjaxControlID="dgproductGroups">
                <UpdatedControls>
                    <radA:AjaxUpdatedControl ControlID="dgProducts" LoadingPanelID = "loadProducts" />
                    <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" />
                </UpdatedControls>
            </radA:AjaxSetting>
            <radA:AjaxSetting AjaxControlID="dgProducts">
                <UpdatedControls>
                    <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" />
                </UpdatedControls>
            </radA:AjaxSetting>
            <radA:AjaxSetting AjaxControlID="dgFileList">
                <UpdatedControls>
                    <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" />
                </UpdatedControls>
            </radA:AjaxSetting>
            <radA:AjaxSetting AjaxControlID="btnShowObsolete">
                <UpdatedControls>
                    <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" />
                </UpdatedControls>
            </radA:AjaxSetting>
            <radA:AjaxSetting AjaxControlID="btnObsolete">
                <UpdatedControls>
                    <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" />
                </UpdatedControls>
            </radA:AjaxSetting>
        </AjaxSettings>
        <ClientEvents OnResponseReceived = "OnAjaxDataReceived" OnRequestStart = "OnAjaxDataSentStart"/>
    </radA:RadAjaxManager>
    <radA:AjaxLoadingPanel 
            id="loadProducts" 
            style="width:320px;padding-top:30px;" 
            runat="server">
        <asp:Image 
            ID="Image2" 
            ImageUrl="~/RadControls/AJAX/Skins/Default/MSN_Blue.gif" 
            AlternateText="Loading" 
            BorderWidth="0px" 
            Runat="server">
        </asp:Image>
    </rada:AjaxLoadingPanel>
    <radA:AjaxLoadingPanel 
            id="loadFileDetails" 
            style="width:320px;padding-top:130px;" 
            runat="server">
        <asp:Image 
            ID="Image3" 
            ImageUrl="~/RadControls/AJAX/Skins/Default/MSN_Blue.gif" 
            AlternateText="Loading" 
            BorderWidth="0px" 
            Runat="server">
        </asp:Image>
    </rada:AjaxLoadingPanel>


And this was the javascript part.

function OnAjaxDataReceived()
    {
        if(dgProductsDisabled = true)
        {
            EnableGrid('ctl00_CntPlHolder_dgProducts');
            dgProductsDisabled = false;
        }
          
        EnableGrid('ctl00_CntPlHolder_dgproductGroups');
    }
  
function OnAjaxDataSentStart()
    {
        //PRODUCTS DATAGRID WILL NOT BE DISABLED WHEN THE PRODUCT GROUPS GRID's ROW IS SELECTED 
        if(dgProductsDisabled = true)
        {
            DisableGrid('ctl00_CntPlHolder_dgProducts');
        }
          
        //DISABLING THE PRODUCT GROUPS DATAGRID UNTIL THE DATA IS RECIEVED FROM THE SERVER THROUGH RAD AJAX
        DisableGrid('ctl00_CntPlHolder_dgproductGroups');
    }
  
function EnableGrid(gridClientID)
    {
        window[gridClientID].AjaxRequest("dgproductGroups", "");
    }
      
    function DisableGrid(gridClientID)
    {
        try
        {
            gridCtrl = window[gridClientID];
            gridCtrl.Control.disabled = "disabled";
            gridCtrl.ClientSettings.Selecting.AllowRowSelect = false;
            gridCtrl.ClientSettings.Resizing.AllowColumnResize = false;
            gridCtrl.ClientSettings.Resizing.AllowRowResize = false;
            gridCtrl.ClientSettings.AllowColumnsReorder = false;
            gridCtrl.ClientSettings.AllowDragToGroup = false;
            gridCtrl.ClientSettings.EnablePostBackOnRowClick = false;
  
            var links = gridCtrl.Control.getElementsByTagName("a");
            var images = gridCtrl.Control.getElementsByTagName("img");
            var inputs = gridCtrl.Control.getElementsByTagName("input");
            var sortButtons = gridCtrl.Control.getElementsByTagName("span");
  
            for(var i = 0; i < links.length; i++)
            {
                links[i].href = "";
                links[i].onclick = function()
                {
                    return false;
                }
            }
              
            for(var i = 0; i < images.length; i++)
            {
                images[i].onclick = function()
                    {
                        return false;
                    }
            }
            for(var i = 0; i < sortButtons.length; i++)
            {
                sortButtons[i].onclick = function()
                {
                    return false;
                }
            }
              
            for(var i = 0; i < inputs.length; i++)
            {
                switch(inputs[i]. type)
                {
                    case "button":
                        inputs[i].onclick = function()
                        {
                            return false;
                        }
                        break;
                      
                    case "checkbox":
                        inputs[i].disabled = "disabled";
                        break;
                    case "radio":
                        inputs[i].disabled = "disabled";
                        break;
                    case "text":
                        inputs[i].disabled = "disabled";
                        break;
                    case "password":
                        inputs[i].disabled = "disabled";
                        break;
                    case "image":
                        inputs[i].onclick = function()
                        {
                            return false;
                        }
                        break;
                    case "file":
                        inputs[i].disabled = "disabled";
                        break;
                          
                    default:
                    break;
                }   
            }
              
            var scrollArea = document.getElementById(gridCtrl.ClientID + "_GridData");
  
            if(scrollArea)
            {
                scrollArea.disabled = "disabled";
            }
        }
        catch(e)
        {
            alert(e);
        
    }

With the new Rad Ajax, I either get error that object does not support the method (in javascript EnableGrid function) or the grid fails to load and I only see the loading image.
Can you please help me in this upgrade.

Thanks,
Ripunjay
Sebastian
Telerik team
 answered on 30 Jun 2011
5 answers
120 views
Hi All,
When I display the advanced form in my app (not Modal)...the RadScheduler "breaks up" the form into sections.
See attached image.

Anyone have any idea why this is happening?

Thank
Alex
Veronica
Telerik team
 answered on 30 Jun 2011
3 answers
131 views
hello,

How to unchecked the default saturday checked in RadSchedulerRecurrenceEditor in weekly option.
It always time checked the saturday in weekly option of RadSchedulerRecurrenceEditor.
I want to unchecked all the days in weekly option.

thanks

Best Regards,
Jiten
Veronica
Telerik team
 answered on 30 Jun 2011
5 answers
154 views
I am following the resource example (with changes) and I am getting an error (Microsoft JScript runtime error: Object doesn't support this property or method) when I am in the following function - it is bombing on slot.get_resource();

 

function isRoomOccupied(scheduler, start, end, slot, appointment)

{

//get the "Room" resource associated with the time slot

var currentRoom = slot.get_resource();

//get all appointments for this "room" in the specified period

var appointmentsForThisRoom = getAppointmentsInRangeByResource(scheduler, start, end, currentRoom, appointment);

//if the list of appointments is not empty there are other appointments in this slot

return appointmentsForThisRoom.get_count() > 0;

}

I am not sure what I am doing wrong. Thanks.

function isRoomOccupied(scheduler, start, end, slot, appointment)

 

{

 

//get the "Room" resource associated with the time slot

 

 

 

 

 

 

var currentRoom = slot.get_resource();

 

 

//get all appointments for this "room" in the specified period

 

 

 

 

 

 

var appointmentsForThisRoom = getAppointmentsInRangeByResource(scheduler, start, end, currentRoom, appointment);

 

 

//if the list of appointments is not empty there are other appointments in this slot

 

 

 

 

 

 

return appointmentsForThisRoom.get_count() > 0;

 

}

 

function warnIfOccupied(start, end, sender, args)

 

{

 

var slot = args.get_targetSlot();

 

 

var appointment = args.get_appointment();

 

 

 

if (isRoomOccupied(sender, start, end, slot, appointment))

 

{

alert(

"This room is not available in this time period.");

 

args.set_cancel(

true);

 

}

 

appointment.get_element().style.border =

"";

 

}

 

function onAppointmentResizeEnd(sender, args)

 

{

 

var start = args.get_appointment().get_start();

 

 

var end = args.get_targetSlot().get_endTime();

 

 

warnIfOccupied(start, end, sender, args);

}

 

function onAppointmentMoveEnd(sender, args)

 

{

 

var start = args.get_targetSlot().get_startTime();

 

 

var end = new Date(start.getTime() + args.get_appointment().get_duration());

 

 

warnIfOccupied(start, end, sender, args);

}

 

function onAppointmentInserting(sender, args)

 

{

 

var slot = args.get_targetSlot();

 

 

var start = slot.get_startTime();

 

 

var end = slot.get_endTime();

 

 

 

if (isRoomOccupied(sender, start, end, slot))

 

{

alert(

"This room is not available in this time period.");

 

args.set_cancel(

true);

 

}

}

 

 

 

<

 

telerik:RadScheduler runat="server" ID="RadScheduler1" OnClientAppointmentEditing="AppointmentEditing"

 

 

 

 

 

 

OnClientAppointmentInserting="AppointmentInserting" EnableCustomAttributeEditing="true"

 

 

 

 

 

 

SelectedDate="2009-07-26" DataSourceID="EventsDataSource" DataKeyField="MeetingID"

 

 

 

 

 

 

DataSubjectField="Description" DataStartField="Start" DataEndField="End" SelectedView="WeekView"

 

 

 

 

 

 

FirstDayOfWeek="Sunday" LastDayOfWeek="Saturday" Skin="Vista" ShowResourceHeaders="false"

 

 

 

 

 

 

CustomAttributeNames="Description,HostedBy,Room" Height="100%" Localization-ConfirmDeleteText="Are you sure you want to delete this meeting?"

 

 

 

 

 

 

TimelineView-UserSelectable="false" OnClientAppointmentMoveEnd="onAppointmentMoveEnd"

 

 

 

 

 

 

OnClientAppointmentResizeEnd="onAppointmentResizeEnd">

 

 

 

 

 

 

<ResourceTypes>

 

 

 

 

 

 

<telerik:ResourceType KeyField="Room" Name="Room" TextField="Room" ForeignKeyField="Room"

 

 

 

 

 

 

DataSourceID="RoomsDataSource" />

 

 

 

 

 

 

</ResourceTypes>

 

 

 

 

 

 

<AppointmentTemplate>

 

 

 

 

 

 

<div style="color: Maroon;">

 

 

 

 

 

<%

#Eval("Description")%></div>

 

 

 

 

 

<%

-- <br />--%>

 

 

<div style="color: Teal;">

 

 

 

 

 

 

</font>Host:&nbsp;<%#Eval("HostedBy")%></div>

 

 

 

 

 

<%

-- <br />--%>

 

 

<div style="color: Fuchsia;">

 

 

 

 

 

Room:

&nbsp;<%#Eval("Room")%></div>

 

 

 

 

 

 

</AppointmentTemplate>

 

 

 

 

 

 

</telerik:RadScheduler>

 

 

 

 

 

 

<asp:Button ID="btnGo" runat="server" Text="Go" Visible="false" />

 

 

 

 

 

 

<asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>

 

 

 

 

 

 

<asp:SqlDataSource ID="EventsDataSource" runat="server" ProviderName="System.Data.SqlClient"

 

 

 

 

 

 

ConnectionString="<%$ ConnectionStrings:MCHPEVENTS %>" SelectCommand="SELECT [MeetingID], [Description], [Start], [End], [Room], [HostedBy], [Food], [Beverages], [Projector], [Easel], [Flipchart], [Microphone], [HotelAVSupplies], [Comments] FROM [Meetings]"

 

 

 

 

 

 

InsertCommand="INSERT INTO [Meetings] ([Description], [Start], [End], [Room]) VALUES (@Description, @Start, @End, @Room)"

 

 

 

 

 

 

UpdateCommand="UPDATE [Meetings] SET [Description] = @Description, [Start] = @Start, [End] = @End, [Room] = @Room WHERE (MeetingID = @MeetingID)"

 

 

 

 

 

 

DeleteCommand="DELETE FROM [Meetings] WHERE [MeetingID] = @MeetingID">

 

 

 

 

 

 

<DeleteParameters>

 

 

 

 

 

 

<asp:Parameter Name="MeetingID" Type="Int32" />

 

 

 

 

 

 

</DeleteParameters>

 

 

 

 

 

 

<UpdateParameters>

 

 

 

 

 

 

<asp:Parameter Name="MeetingID" Type="Int32" />

 

 

 

 

 

 

<asp:Parameter Name="Description" Type="String" />

 

 

 

 

 

 

<asp:Parameter Name="Start" Type="DateTime" />

 

 

 

 

 

 

<asp:Parameter Name="End" Type="DateTime" />

 

 

 

 

 

 

<asp:Parameter Name="Room" Type="String" />

 

 

 

 

 

 

</UpdateParameters>

 

 

 

 

 

 

<InsertParameters>

 

 

 

 

 

 

<asp:Parameter Name="Description" Type="String" />

 

 

 

 

 

 

<asp:Parameter Name="Start" Type="DateTime" />

 

 

 

 

 

 

<asp:Parameter Name="End" Type="DateTime" />

 

 

 

 

 

 

<asp:Parameter Name="Room" Type="String" DefaultValue="TBD" />

 

 

 

 

 

 

</InsertParameters>

 

 

 

 

 

 

</asp:SqlDataSource>

 

 

 

 

 

 

<asp:SqlDataSource ID="RoomsDataSource" runat="server" ProviderName="System.Data.SqlClient"

 

 

 

 

 

 

ConnectionString="<%$ ConnectionStrings:MCHPEVENTS %>" SelectCommand="SELECT DISTINCT([Room]) FROM [Meetings]">

 

 

 

 

 

 

</asp:SqlDataSource>

 

 

 

 

Veronica
Telerik team
 answered on 30 Jun 2011
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?