Telerik Forums
UI for ASP.NET AJAX Forum
1 answer
253 views
I could use some clues to help me find what I've done wrong.  Here's the situation:

I have a RadGrid control where there is a top level for Issues where each Issue can have 0-n Action Items.  The grid initially displays just the Issues. Clicking on the expand button causes an Ajax postaback, the Action Items for the selected issue are retrieved and displayed.

This was working fine until I started working on some modifications to make it work in different environment. The change involves getting the name of a SharePoint sub-site from a web part connector instead of assuming the current site. The connector event fires relatively late in lifecycle of a page, so I had to re-arrange data binding code.  I'm sure this has something to do with my problem.

After these changes, the grid no longer expands/contracts when the button is pressed.  The Ajax postback is still occurring and the events are still firing on code behind as expected.  The data is retrieved and added to the child view.  If I expand all the rows declaratively, I can see all the data. The properties of the grid item show "Expanded=true."

Has anybody seen this?  Is there some secret to getting the grid to redraw itself on an Ajax postback when the server side code has rebound data?

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI, Version=2010.3.1317.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="IssuesAndActionsDisplayUserControl.ascx.cs"
    Inherits="DEP.PMIS.Project.Dashboard.IssuesAndActionsDisplay.IssuesAndActionsDisplayUserControl" %>
<Telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default">
    <asp:Label ID="lblLoading" runat="server">Loading... </asp:Label>
</Telerik:RadAjaxLoadingPanel>
<!--Added to hide Recently modified Quick launch -->
<style type="text/css">
.s4-recentchanges
{display:none ;}
</style>
<div class="events-info">
    <Telerik:RadAjaxManagerProxy ID="AjaxManagerProxy1" runat="server">
        <AjaxSettings>
            <Telerik:AjaxSetting AjaxControlID="RadGrid1" >
                <UpdatedControls>
                    <Telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </Telerik:AjaxSetting>
        </AjaxSettings>
    </Telerik:RadAjaxManagerProxy>
    <Telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">
        <Telerik:RadGrid ID="RadGrid1" 
            runat="server" 
            OnPreRender="RadGrid1_PreRender" 
            onitemdatabound="RadGrid1_ItemDataBound" 
            OnDetailTableDataBind="RadGrid1_DetailTableDataBind"
            GridLines="None" 
            DataMember="Issues"
            AllowFilteringByColumn="True" 
            AllowSorting="True"
            AllowPaging="True" 
            AutoGenerateColumns="False" 
            onpdfexporting="RadGrid1_PdfExporting"
            onitemcommand="RadGrid1_ItemCommand">
            <ExportSettings IgnorePaging="true" OpenInNewWindow="true" FileName="Issues_And_Actions" >
                <Pdf Title="Issues and Actions Report" PageHeight="13in" PageWidth="19in" />
            </ExportSettings>
            <MasterTableView DataKeyNames="Issue ID" 
                HierarchyDefaultExpanded="true"
                GridLines="None" 
                BorderStyle="Outset" 
                NoMasterRecordsText="No Issues to display" 
                NoDetailRecordsText="No Action Items to display">
                <CommandItemSettings ExportToPdfText="Export to Pdf" />
                <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
                </RowIndicatorColumn>
                <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column" 
                    Visible="True">
                </ExpandCollapseColumn>
                <Columns>
                    <Telerik:GridHyperLinkColumn AllowFiltering="False" 
                        FilterControlAltText="Issue Filter Column" HeaderText="Issue ID" 
                        Text="Link" UniqueName="Issue ID"  ItemStyle-Width="15%" 
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" 
                        ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="15%"/>
                    </Telerik:GridHyperLinkColumn>
                    <Telerik:GridBoundColumn HeaderText="Issue Name" DataField="Issue Name" 
                        ItemStyle-Width="15%" 
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="15%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Issue Description" 
                        DataField="Issue Description" ItemStyle-Width="30%" 
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="30%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Priority" DataField="Issue Priority" 
                        ItemStyle-Width="7%" AutoPostBackOnFilter="true"
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="7%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Created" DataField="Issue Created Date" 
                        ItemStyle-Width="8%" AutoPostBackOnFilter="true" DataFormatString="{0:d}"
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="8%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Completed" 
                        DataField="Issue Completed Date" ItemStyle-Width="8%" DataFormatString="{0:d}"
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="8%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Due Date" 
                        DataField="Target Resolution Date" ItemStyle-Width="8%" DataFormatString="{0:d}"
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="8%" />
                    </Telerik:GridBoundColumn>
                    <Telerik:GridBoundColumn HeaderText="Request Status"  
                        DataField="Request Status" ItemStyle-Width="9%"
                        CurrentFilterFunction="StartsWith" FilterDelay="4000" ShowFilterIcon="false" ItemStyle-BorderStyle="Outset" ItemStyle-BorderWidth="1px">
                        <ItemStyle Width="9%" />
                    </Telerik:GridBoundColumn>
                </Columns>
                <DetailTables>
                    <Telerik:GridTableView runat="server" 
                        DataKeyNames="Issue ID" 
                        DataMember="Actions" 
                        Name="Actions" 
                        GridLines="Horizontal"
                        PageSize="5" 
                        Width="100%" 
                        AllowFilteringByColumn="false" 
                        NoDetailRecordsText="No Action Items to display" 
                        NoMasterRecordsText="No Issues to display"
                        AllowSorting="true">
                        <CommandItemSettings ExportToPdfText="Export to Pdf" />
                        <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
                            <HeaderStyle Width="20px" />
                        </RowIndicatorColumn>
                        <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
                            <HeaderStyle Width="20px" />
                        </ExpandCollapseColumn>
                        <EditFormSettings>
                            <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                            </EditColumn>
                        </EditFormSettings>
                        <Columns>
                            <Telerik:GridBoundColumn HeaderText="Suggested Action" 
                                DataField="Suggested Action" ItemStyle-Width="35%" >
                                <ItemStyle Width="35%" />
                            </Telerik:GridBoundColumn>
                            <Telerik:GridBoundColumn HeaderText="Assigned To" 
                                DataField="Assigned To" ItemStyle-Width="8%" >
                                <ItemStyle Width="8%" />
                            </Telerik:GridBoundColumn>
                            <Telerik:GridBoundColumn HeaderText="Action Created Date" 
                                DataField="Action Created Date" ItemStyle-Width="8%" >
                                <ItemStyle Width="8%" />
                            </Telerik:GridBoundColumn>
                            <Telerik:GridBoundColumn HeaderText="Completed Date" DataField="Completed Date" ItemStyle-Width="8%" >
                                <ItemStyle Width="8%" />
                            </Telerik:GridBoundColumn>
                            <Telerik:GridBoundColumn HeaderText="Notes" DataField="Resolution Taken" ItemStyle-Width="35%" >
                                <ItemStyle Width="35%" />
                            </Telerik:GridBoundColumn>
                            <Telerik:GridBoundColumn HeaderText="Request Status" DataField="Request Status" ItemStyle-Width="8%" >
                                <ItemStyle Width="8%" />
                            </Telerik:GridBoundColumn>
                        </Columns>
                    </Telerik:GridTableView>
                </DetailTables>
                <EditFormSettings>
                    <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                    </EditColumn>
                </EditFormSettings>
                <PagerStyle Mode="NumericPages" />
            </MasterTableView>
            <FilterMenu EnableImageSprites="False">
            </FilterMenu>
            <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default">
            </HeaderContextMenu>
        </Telerik:RadGrid>
    </Telerik:RadAjaxPanel>
</div>
<div id="buttonPanel">
    <asp:Label ID="lblExport" runat="server" Text="Export to PDF: "></asp:Label>
    <asp:ImageButton ID="btnExportPDF" runat="server" AlternateText="Export to PDF" 
        ImageUrl="~/_layouts/images/DEP.PMIS.Project.Dashboard/pdficon_large.png" 
        onclick="btnExportPDF_Click" />
    <br />
</div>
<div id="errorPanel">
    <br />
    <asp:Panel ID="ErrorPanel" runat="server" Visible="true">
        <asp:Label ID="lblerror" runat="server" ForeColor="Red"></asp:Label>
    </asp:Panel>
</div>

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
  
using Microsoft.SharePoint;
using Telerik.Web.UI;
  
using DEP.PMIS.Common;
using DEP.PMIS.Entityframework;
using DEP.PMIS.CPortalWebParts.Code;
  
namespace DEP.PMIS.Project.Dashboard.IssuesAndActionsDisplay
{
    /// <summary>
    /// The issues and actions web part has a Telerik RadGrid with a Master/Detail table arrangment
    /// To get the master/detail the DetailTableDataBind bind event is needed.
    /// (Attempts to use Telerik's automatic capabilities didn't work)
    /// </summary>
    public partial class IssuesAndActionsDisplayUserControl : UserControl
    {
        IssuesAndActions _IssuesAndActions;
        private IProjectID _projectInfo;
  
        private SPWeb _projectWeb;
        private bool _shouldDispose;
  
        /// <summary>
        /// Called by the web part when the selected project changes (CPortal)
        /// </summary>
        public IProjectID ProjectInfo
        {
            set
            {
                _projectInfo = value;
                RadGrid1.Rebind();
            }
        }
  
        protected void Page_Load(object sender, EventArgs e)
        {
            _IssuesAndActions = new IssuesAndActions();
  
            if (!Page.IsPostBack)
            {
                  
            }
        }
  
        protected void RadGrid1_PreRender(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // Uncomment to expand the first item by default
                //RadGrid1.MasterTableView.Items[0].Expanded = true;
            }
        }
  
        /// <summary>
        /// Called when the detail table is bound to data. Sets the Actions grid's data
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        protected void RadGrid1_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
        {
            try
            {
                OpenWeb();
                GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
                if (e.DetailTableView.Name == "Actions")
                {
                    string IssueID = dataItem.GetDataKeyValue("Issue ID").ToString();
                    e.DetailTableView.DataSource = _IssuesAndActions.Actions(_projectWeb, IssueID);
                      
                }
            }
            catch (Exception ex)
            {
                lblerror.Text = "Error binding Actions table: " + ex.Message + ": " + ex.StackTrace;
                lblerror.Visible = true;
            }
            finally 
            {
                if (_projectWeb != null && _shouldDispose)
                {
                    _projectWeb.Dispose();
                }
            
        }
  
  
        protected void Page_Init(object sender, EventArgs e)
        {
            RadGrid1.NeedDataSource += new GridNeedDataSourceEventHandler(RadGrid1_NeedDataSource);
        }
  
        protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            lblerror.Text = "";
  
            try
            {
                OpenWeb();
                RadGrid1.DataSource = _IssuesAndActions.IssuesActions(_projectWeb);
  
            }
            catch (Exception ex)
            {
                lblerror.Text = "Error binding Issues data: " + ex.Message + ": " + ex.StackTrace;
                lblerror.Visible = true;
            }
            finally
            {
                if (_projectWeb != null && _shouldDispose)
                {
                    _projectWeb.Dispose();
                }
            }
        }
  
        /// <summary>
        /// Called once for each row in the data grid.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
        {
            try
            {
                if (e.Item is GridDataItem)
                {
                    GridDataItem item = (GridDataItem)e.Item;
                    if (item.DataItem is DataRowView)
                    {
                        DataRowView view = (DataRowView)item.DataItem;
  
                        // Install the URL for the hyperlink column
                        // (Only do this for the Issues table)
                        if (view.Row.Table.TableName == "Issues")
                        {
                            TableCell cell = ((GridDataItem)e.Item)["Issue ID"];
                            HyperLink link = (HyperLink)cell.Controls[0];
  
                            DataRowView rowView = (DataRowView)e.Item.DataItem;
                            DataRow row = rowView.Row;
                            string url = row["Form URL"].ToString();
                            string issueID = row["Issue ID"].ToString();
  
                            link.NavigateUrl = url;
                            link.Text = issueID;
                        }
                    }
                }
  
            }
            catch (Exception ex)
            {
                lblerror.Text = "Error binding data to Issue row: " + ex.Message + ": " + ex.StackTrace;
                lblerror.Visible = true;
            }
        }
  
        protected void btnExportPDF_Click(object sender, ImageClickEventArgs e)
        {
            RadGrid1.MasterTableView.HierarchyDefaultExpanded = true;
            RadGrid1.ExportSettings.FileName = "Issues and Actions for " + SPContext.Current.Web.Name;
            RadGrid1.MasterTableView.ExportToPdf();
        }
  
        protected void RadGrid1_PdfExporting(object sender, GridPdfExportingArgs e)
        {
  
        }
  
        protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == RadGrid.ExpandCollapseCommandName)
            {
                if (e.Item.Expanded == true)
                    e.Item.Expanded = false;
                else
                    e.Item.Expanded = true;
            }
        }
  
        /// <summary>
        /// Opens the SPWeb where the Issues and Actions are found
        /// This could be the current web or, if the Project Info connecter was set, the 
        /// web will be named there.
        /// </summary>
        /// <remarks>
        /// Note that if we use OpenWeb, we need to dispose of things later on.
        /// </remarks>
        private void OpenWeb()
        {
            // Look for the project ID in the Project Info (could be set if part is used in CPortal)
            if (_projectInfo != null)
            {
                _projectWeb = SPContext.Current.Site.OpenWeb(_projectInfo.Name);
                _shouldDispose = true;
  
            }
            else
            {
                // Otherwise assume current site is a project site
                _projectWeb = SPContext.Current.Web;
                _shouldDispose = false;
            }
        }
    }
}
Tsvetoslav
Telerik team
 answered on 10 Aug 2012
1 answer
101 views
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("SelectedIndexChanged"); 

 

How do I get the selected row orderid

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e) 
        { 
            //string[] args = e.Argument.Split('?')[1].Split('!'); 
            GridViewRow row = RadGrid1.Rows[e]; 
            if (e.Argument == "SelectedIndexChanged") 
            { 
                 //Label1.Text = (e.Item as GridDataItem)["OrderID"].Text; 
                if (RadGrid1.Items.Count == 0) return;
Shinu
Top achievements
Rank 2
 answered on 10 Aug 2012
1 answer
715 views
Is there any way to get the original file path of a file that was selected for async upload?  This is for an internal application where our users can upload files to the sytem.  Basically I want to be able to grab the original file location from a user's machine to store as a field in the database.  Thanks.
Princy
Top achievements
Rank 2
 answered on 10 Aug 2012
0 answers
123 views
Hi,

          I have two combo box  , one for country another one for state.  Depends upon the selection in Country combo i will load the states in states Combobox.

                             I have selected index changed server side function for both the combo box.  I have set the Autopostback property for the both the combo box as false.

                              In the client side selected index chnaged function I have used the __doPostBack   function with corresponding combobox unique id  as EventTarget.

When i select any country both country and state server side selected Index changed function will be called. 
   
            My problem is when I select the state in the state combo box again both functions will be called. Here I can't understand why the country selected index changed function is called.

I have placed both the combobox in asp updatepanel. I have set the trigger of the country update panel  is the country combobox and the trigger for the state update panel is  also country combo box.

**** I want to know how these events will be handled and how these functions called depends on this events.

Please give the solution for this problem.


Thanks
Velkumar.
Velkumar
Top achievements
Rank 2
 asked on 10 Aug 2012
0 answers
37 views
Hi Team,
I want to disable/invisible the Image Files table from Image Manager window. Please refer the image http://screencast.com/t/bRxuvHZgIi

Thanks in Advance.

Regards,
Babu R

Babu Raghu
Top achievements
Rank 1
 asked on 10 Aug 2012
2 answers
249 views
Hello everyone,

Using Telerik ASP.NET AJAX Q1 2012 SP1

I'd like to change the drop down arrow of the radcombobox while the combo box loads it's items on the client.  Here is some background of what i've done/tested/got working thus far.  I have a combobox on the page I've attached a $telerik.$(document).ready handler that calls a function to load the combobox.  This all works great.  I've read about using the combox.get_imageDomElement(); in the documentation and then setting the src property to a gif.  However this does not work.

Documentation Line: http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html  see the description for get_imageDomElement()

I've also inspected the return DOM element and tried to manipulate the DOM properties (e.g. style.backgroundImage; currentStyle.backgroundImage) to se the image that way with no luck.

Desired results are as follows: change the triangle image of the drop down to a loading animation gif while the combobox items are loaded, then change it back to the triangle image when everythings ready. This needs to happen client side without post back.

Code examples:
Javascript:
$telerik.$(document).ready(function () {
     LoadComboBox1($telerik.findComboBox("RadComboBox1"));
});
 
function LoadComboBox1(sender){
     var myComboBox = sender;
     var myComboBoxImage = myComboBox.get_imageDomElement();
     //The loading.gif image is in the same directory as the aspx file
     //This is what is not working properly
     var myComboBoxImage.src = "loading.gif";
     $telerik.$.ajax({
          //ajax post done here removed for clarity this code works perfectly
     });
}

ASPX:
<telerik:RadComboBox ID="RadComboBox1" runat="server"></telerik:RadComboBox>
<telerik:RadCodeBlock ID=RadCodeBlock1" runat="server">
<script type="text/javascript">
//See Javascript Code Block Above
</script>
</telerik:RadCodeBlock>

Any help would greatly be appreciated.

Thanks,
Sean
Derek Kepler
Top achievements
Rank 1
 answered on 09 Aug 2012
3 answers
90 views
It works fine when page is 61 or smaller, but the moment you increase it to 62, and higher you get a system.webforms.pagerequestmanagerservererrorexception 500. There is nothing wrong with the data because for testing purpose the query is a union of rows that work. Image of the error attached.
Martin
Top achievements
Rank 1
 answered on 09 Aug 2012
1 answer
96 views
It is possible to span a template column to Multiple columns in the grid.
 One of the column in my grid is very long. It introduces the additional scrollbar.
Pavlina
Telerik team
 answered on 09 Aug 2012
1 answer
109 views

I have a RadGrid configured with Paging and Grouping with Aggregates
- AllowPaging = true
- ShowGroupFooter = true
- RetainGroupFootersVisibility=true

 

 

 

 

<telerik:GridGroupByExpression>
    <GroupByFields>
        <telerik:GridGroupByField FieldName="A" SortOrder="Ascending" HeaderText="A" />
    </GroupByFields>
</telerik:GridGroupByExpression>

I have 1 column defined as Aggregate

 

<telerik:GridBoundColumn AllowFiltering="False" SortExpression="Amount"
    DataField="Amount"  DataFormatString="{0:C2}" Groupable="False" HeaderText="Amount"
    ReadOnly="True" Reorderable="False" Resizable="False" UniqueName="Amount"
    Aggregate="Sum">
</telerik:GridBoundColumn>

Problem

The RadGrid, by default, appears to Aggregate for items in the current page (i.e. The Grouping Total that appears in the GroupFooter... only applies to visible items on the currently selected page (even when the group extends into other pages).

Question

How can I implement a custom aggregate in which I sum all of the values for a particular column within a group (across all data items that are in the group / i.e. across all pages)? 




Preston
Top achievements
Rank 1
 answered on 09 Aug 2012
1 answer
77 views
In any other excel format, the caption appears as an extra row at the top of the spreadsheet. Is there a way to get this behavior when exporting to BIFF?
If not is there a way to insert an arbitrary row at the top of the resultant spreadsheet?

Thanks!
Daniel
Telerik team
 answered on 09 Aug 2012
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?