Telerik Forums
UI for ASP.NET AJAX Forum
10 answers
682 views
I have a very strange thing happening and really need some help. I am running the code below which includes a parent radgrid and a nested one but when the page first loads and I expand one of the top level grid items then the nestedviewtemplate grid (detailsGrid) doesn't have any data in it. When debugging this the detailsGrid_OnNeedDataSource event is not firing. However the parent grid (destinationCodesGrid) destinationCodesGrid_OnNeedDataSource method is firing immediately then the page renders with nothing in the nested grid. About 20 seconds later the detailsGrid_OnNeedDataSource event fires and the breakpoint hits but only after it is too late.

Here is an odd thing though if I do some other action in the grid that fires a postback first such as paging to the next page or clicking edit then after that point the destinationCodesGrid_OnNeedDataSource method fires immediately. Please advise!

Here is the code:

====ASPX========

 

     <telerik:RadGrid ID="destinationCodesGrid" runat="server" AutoGenerateColumns="False"   
                    OnInsertCommand="destinationCodesGrid_OnInsertCommand" 
                    OnUpdateCommand="destinationCodesGrid_OnUpdateCommand"                    
                    OnNeedDataSource="destinationCodesGrid_OnNeedDataSource" 
                    OnDeleteCommand="destinationCodesGrid_OnDeleteCommand" 
                 OnItemCreated="destinationCodesGrid_OnItemCreated" 
                     OnItemCommand="destinationCodesGrid_OnItemCommand" 
                    Width="500px"   
                    AutoGenerateDeleteColumn="True"   
                    OnColumnCreated="destinationCodesGrid_OnColumnCreated" AllowFilteringByColumn="True"   
                    GridLines="None" AllowPaging="true" PageSize="10"   
                     > 
                    <HeaderContextMenu> 
                        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> 
                    </HeaderContextMenu> 
                    <MasterTableView DataKeyNames="DialID" EditMode="InPlace" InsertItemDisplay="Bottom" 
                        CommandItemDisplay="Bottom">  
                          
                <NestedViewTemplate>          
                 
                                <telerik:RadGrid runat="server" ID="detailsGrid" OnNeedDataSource="detailsGrid_OnNeedDataSource"   
                                    ShowFooter="true" AllowSorting="true" AutoGenerateDeleteColumn="True">  
                                    <MasterTableView ShowHeader="true" AutoGenerateColumns="False" AllowPaging="false" 
                                        DataKeyNames="UniqueKey" > 
                                         
                                        <Columns> 
                                            <telerik:GridBoundColumn DataField="PhoneNum" HeaderText="Phone Number" UniqueName="PhoneNum">  
                                            </telerik:GridBoundColumn> 
                                            <telerik:GridBoundColumn DataField="DestName" HeaderText="Destination Name" UniqueName="DestName">  
                                            </telerik:GridBoundColumn> 
                                            <telerik:GridEditCommandColumn /> 
                                        </Columns> 
                                    </MasterTableView> 
                                </telerik:RadGrid>                                                    
                   
                </NestedViewTemplate> 

======Code behind=======

 

protected void Page_Load(object sender, EventArgs e)   
{  
}    
 
  protected void destinationCodesGrid_OnNeedDataSource(object source, GridNeedDataSourceEventArgs e)  
{  
        Administration admin = new Administration(CurrentServer);  
        destinationCodesGrid.DataSource = admin.RetrieveSpeedDialMaster();  
}  
 
 
protected void detailsGrid_OnNeedDataSource(object source, GridNeedDataSourceEventArgs e)  
{  
        RadGrid grid = (RadGrid)source;  
        GridNestedViewItem nestedItem = (GridNestedViewItem)grid.NamingContainer;  
        string dataKeyValue = Convert.ToString(((GridDataItem)(nestedItem.ParentItem)).GetDataKeyValue("DialID"));   
        RadGrid tempGrid = (RadGrid)nestedItem.FindControl("detailsGrid");  
        tempGrid.DataSource = GetDetailsDataSource(dataKeyValue);  

Eyup
Telerik team
 answered on 01 Feb 2016
3 answers
53 views

Telerik Q1/2016 but this rendering behavior is the same in previous versions of Telerik.

I have RadGrid in a <TD colspan="3">.   After postback the radgrid appears above the <table>. 

Issue occurs with Chrome 47.0.2526.111 and IE 11 (when Edge mode is used).

It only works fine with content="IE=EmulateIE8".

VS2015 SP1, no other HTML syntax errors.  Using AjaxManager.

<!DOCTYPE html>

Pavlina
Telerik team
 answered on 01 Feb 2016
5 answers
246 views
Hi,

I have grid that contains many different column. Also i have activate the scroll and set the frozencolumncount to 3.

The thing is that my last column is not showing completly. I have to create an empty column visible="false" and set a specific with to be able to see my last column completly. (see attachment)

Here is my grid html code :

<telerik:RadGrid ID="RadGridCadetStaffing" runat="server" AutoGenerateColumns="False"
    Style="margin-top: 5px;" AllowSorting="true" AllowFilteringByColumn="true" AllowMultiRowSelection="true"
    meta:resourcekey="RadGridCadetStaffing" OnItemCreated="OnItemCreated" OnNeedDataSource="OnNeedDataSource" AllowPaging="true" EnableViewState="true">
    <MasterTableView TableLayout="Fixed" CommandItemDisplay="TopAndBottom" AutoGenerateColumns="false">
        <CommandItemTemplate>
            <asp:Panel ID="GridFooter" CssClass="ListFooter" runat="server" HorizontalAlign="Right">
                <fortress:ButtonAddNew ID="ButtonAddNew" runat="server"></fortress:ButtonAddNew>
                <asp:ImageButton ID="ImageButtonSubmitCadetApplication" runat="server" OnClick="OnSubmitCadetApplication" style="margin-right:10px"
                 ImageUrl="~/App_Themes/Fv2Default/StandardButtons/SubmitCommit20x20.png" meta:resourcekey="ImageButtonSubmitCadetApplication" />
                <asp:ImageButton ID="ImageButtonDeleteCadetApplication" runat="server" OnClick="OnDeleteSelected"
                    ImageUrl="$/grid/Delete20x20.png" AlternateText="~Supprimer une application"
                    meta:resourcekey="ImageButtonDeleteCadetApplication" />
            </asp:Panel>
        </CommandItemTemplate>
        <Columns>
            <telerik:GridClientSelectColumn Reorderable="False" UniqueName="ClientSelectColumn"
                HeaderText="~Sélection" meta:resourcekey="GridClientSelectColumn">
                <HeaderStyle Width="20px"></HeaderStyle>
            </telerik:GridClientSelectColumn>
            <%--Insérez vos colonnes ici -- DÉBUT --%>
            <telerik:GridTemplateColumn UniqueName="TemplateEditColumn" AllowFiltering="false">
                <ItemTemplate>
                    <fortress:ButtonEdit ID="ButtonEdit" runat="server">
                    </fortress:ButtonEdit>
                </ItemTemplate>
                <HeaderStyle Width="30px" />
            </telerik:GridTemplateColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="CadetId" Visible="false">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="StaffableActivityContingentId"
                Visible="false" HeaderText="~StaffableActivityContingentId">
            </telerik:GridBoundColumn>
            <fortress:RadGridDateColumn UniqueName="WaiverCount" Visible="false">
            </fortress:RadGridDateColumn>
            <telerik:GridTemplateColumn AllowFiltering="false" ItemStyle-HorizontalAlign="Center"
                UniqueName="WaiverCountImage" meta:resourcekey="GridTemplateColumnWaiverCount"
                SortExpression="ApplicationStatus">
                <HeaderStyle Width="25px" HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:Image ID="ImageRespectAllCriteria" runat="server" Visible='<%#EvalIsIncomplete(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId))%>'
                        ImageUrl='~/App_Themes/Fv2Default/StandardButtons/Warning20x20.png' meta:resourcekey="ImageRespectAllCriteria" />
                         <asp:Image ID="ImageRejected" runat="server" Visible='<%#EvalIsRejected(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId))%>'
                        ImageUrl='~/App_Themes/Fv2Default/StandardButtons/Error20x20.png' meta:resourcekey="ImageImageRejected" />
                    <asp:Label ID="LabelRespectAllCriteria" runat="server" Visible='<%# !EvalIsIncomplete(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId)) && !EvalIsRejected(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId)) %>'
                        Text=" "></asp:Label>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="ApplicationStatus" HeaderText="~ApplicationStatus"
                meta:resourcekey="GridBoundColumnApplicationStatus">
                <HeaderStyle Width="110px" />
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn UniqueName="ApplicationDerogationStatus" HeaderText="~Dérogation" AllowFiltering="false"
             meta:resourcekey="TemplateColumnApplicationDerogationStatus">
                <HeaderStyle Width="30px" HorizontalAlign="Center" />
                <ItemStyle HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:Label ID="LabelEmptyDerogation" runat="server" Text=" "
                    Visible='<%# !EvalApplicationDerogationStatus(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId), Eval(LocalizedCadetStaffingFieldsName.WaiverCount))%>'></asp:Label>
                    <asp:Image ID="ImageDerogation" runat="server" ImageUrl="~/App_Themes/Fv2Default/StandardButtons/CheckWaiver20x20.png"
                     Visible='<%# EvalApplicationDerogationStatus(Eval(LocalizedCadetStaffingFieldsName.ApplicationStatusId), Eval(LocalizedCadetStaffingFieldsName.WaiverCount))%>' meta:resourcekey="ImageDerogation" />
                </ItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridHyperLinkColumn AllowFiltering="true" UniqueName="ContingentSerialNumber" HeaderText="~ContingentSerialNumber"
                DataNavigateUrlFormatString="~/Content/StaffableActivities/Contingent/UnitStaffableActivityContingentView.aspx?ContingentId={0}"
                DataNavigateUrlFields="StaffableActivityContingentId" meta:resourcekey="GridBoundColumnContingentSerialNumber">
                <HeaderStyle Width="70px" />
            </telerik:GridHyperLinkColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="Name" HeaderText="~name"
                meta:resourcekey="GridBoundColumnName">
                <HeaderStyle Width="80px" />
            </telerik:GridBoundColumn>
            <fortress:StaffableActivityTypeColumn UniqueName="StaffableActivityType">
            </fortress:StaffableActivityTypeColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="Nic" HeaderText="~Nic"
                meta:resourcekey="GridBoundColumnNic">
                <HeaderStyle Width="70px" />
            </telerik:GridBoundColumn>
            <telerik:GridHyperLinkColumn AllowFiltering="true" UniqueName="LastName" HeaderText="~LastName"
                DataNavigateUrlFormatString="~/Content/Cadet/CadetView.aspx?CadetId={0}"
                DataNavigateUrlFields="CadetId" meta:resourcekey="GridBoundColumnLastName">
                <HeaderStyle Width="100px" />
            </telerik:GridHyperLinkColumn>
            <telerik:GridBoundColumn AllowFiltering="true" UniqueName="FirstName" HeaderText="~Prénom"
                meta:resourcekey="GridBoundColumnFirstName">
                <HeaderStyle Width="100px" />
            </telerik:GridBoundColumn>
            <%--Package de CadetRankColumn--%>
            <fortress:CadetRankColumn>
            </fortress:CadetRankColumn>
            <telerik:GridBoundColumn UniqueName="CadetRankSequence" Visible="false">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn UniqueName="CadetRankId" Visible="false">
            </telerik:GridBoundColumn>
            <%-- Fin package de CadetRankColumn--%>
            <telerik:GridBoundColumn UniqueName="SubmittedUnitShortName"  HeaderText="~Saisi par" meta:resourcekey="GridBoundColumnSubmittedUnitShortName">
            <HeaderStyle Width="80px" />
            </telerik:GridBoundColumn>
            <Fortress:RadGridDateColumn UniqueName="SubmissionDate" DataFormatString="{0:yyyy-MM-dd}" meta:resourcekey="GridBoundColumnSubmissionDate">
                <HeaderStyle Width="80px" />
            </Fortress:RadGridDateColumn>
            <telerik:GridBoundColumn UniqueName="SubmissionStatus" meta:resourcekey="GridBoundColumnSubmissionStatus">
                <HeaderStyle Width="110px" />
            </telerik:GridBoundColumn>
            <telerik:GridHyperLinkColumn AllowFiltering="true" UniqueName="UnitShortName" HeaderText="~UnitShortName"
                DataNavigateUrlFormatString="~/Content/Unit/UnitView.aspx?UnitId={0}"
                DataNavigateUrlFields="CadetCorpsId" meta:resourcekey="GridBoundColumnUnitShortName">
                <HeaderStyle Width="70px" />
            </telerik:GridHyperLinkColumn>
            <fortress:RadGridDateColumn AllowFiltering="false" UniqueName="ContingentStartDate"
                HeaderText="~ContingentStartDate" DataFormatString="{0:d}" meta:resourcekey="GridBoundColumnContingentStartDate">
                <HeaderStyle Width="80px" />
            </fortress:RadGridDateColumn>
            <fortress:RadGridDateColumn AllowFiltering="false" UniqueName="ContingentEndDate"
                HeaderText="~ContingentEndDate" DataFormatString="{0:d}" meta:resourcekey="GridBoundColumnContingentEndDate">
                <HeaderStyle Width="80px" />
            </fortress:RadGridDateColumn>
            <fortress:RadGridDateColumn AllowFiltering="true" UniqueName="StartApplicationDate"
                HeaderText="~StartApplicationDate" DataFormatString="{0:d}" meta:resourcekey="GridBoundColumnStartApplicationDate">
                <HeaderStyle Width="90px" />
            </fortress:RadGridDateColumn>
            <fortress:RadGridDateColumn AllowFiltering="true" UniqueName="EndApplicationDate"
                HeaderText="~EndApplicationDate" DataFormatString="{0:d}" meta:resourcekey="GridBoundColumnEndApplicationDate">
                <HeaderStyle Width="90px" />
            </fortress:RadGridDateColumn>
            <telerik:GridBoundColumn AllowFiltering="false" UniqueName="CommandingOfficerPriority"
                HeaderText="~Priorité du commandant" meta:resourcekey="GridBoundColumnCommandingOfficerPriority">
                <HeaderStyle Width="80px" />
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn AllowFiltering="false" UniqueName="CadetPreference" HeaderText="~Préférence du cadet"
                meta:resourcekey="GridBoundColumnCadetPreference">
                <HeaderStyle Width="80px" />
            </telerik:GridBoundColumn>
            <%-- Cette colonne permet de régler le problème de scroll horizontal --%>
            <fortress:RadGridDateColumn AllowFiltering="false" UniqueName="EmptyColumn">
                <HeaderStyle Width="217px" />
            </fortress:RadGridDateColumn>
            <%--Insérez vos colonnes ici -- FIN --%>
        </Columns>
    </MasterTableView>
    <ClientSettings>
        <Scrolling AllowScroll="true" UseStaticHeaders="true" ScrollHeight="360px" FrozenColumnsCount="3" />
    </ClientSettings>
</telerik:RadGrid>

The <fortress.... > are home made gridboundcolumn.

Is there a way to remove the last column that only serve to resize correctly my grid?

Thx for your help,
have a nice day,
Guillaume
Pavlina
Telerik team
 answered on 01 Feb 2016
7 answers
2.1K+ views

Hi.

 

I’ve been looking at your sample for validating a Raddatepicker:-

http://demos.telerik.com/aspnet-ajax/calendar/examples/datepicker/validation/defaultcs.aspx

 

This is my scenario:

I have a raddatepicker and the mandate=”01/01/2009” this works great of course if I want to prompt the user that the date is incorrect, however I can still submit the form.

 

I then put a compare validator on the page and set that to Greater than or equal to “01/01/2009”, for some reason it won’t work.

 

Basically I want to prevent the user from submitting the form if the date is less than “01/01/2009” am I missing something?

 

Thanks

Karl

Eyup
Telerik team
 answered on 01 Feb 2016
2 answers
132 views

I am using RedCaptcha on registration page and it works ok, but if i open this page from mobile device (or emulating it in browser) the redcaptcha image doesn't appear. If i open link from captcha src="" attribute in new tab i see the image.

You can see this issue by this url: 
https://demo.provantportalstaging.com/_layouts/15/Provant.CustomerPortal.Authentication/Participant%20Pages/Registration.aspx

Maybe you have faced such issue earlier. 
Any help will be appreciated

Igor
Top achievements
Rank 1
 answered on 01 Feb 2016
1 answer
101 views

HI

I'm using ToolsFile to customize the RadEditor.Tools :

.aspx

  <telerik:RadEditor ID="RadEditor1" Runat="server" ToolbarMode="RibbonBar" ToolsFile="~/Editor/DefaultToolsFile.xml">
  </telerik:RadEditor>

ToolsFile.xml

  <tools name="Clipboard" tab="Home">
    ...
    <tool name="Cut" text="cut" size="medium"/>
    ...

But how to set the group header (space char included) for tools group in ToolsFile :

  <tools name="Clipboard" text="Home here" tab="Home">
    ...
    <tool name="Cut" text="cut" size="medium"/>
    ...

text and header property not works, change the value of 'name' property ?

*group header sample - http://docs.telerik.com/devtools/wpf/controls/radribbonview/features/ribbon-controls/images/RibbonView_Group_Overview.png

Best regards

Chris

 


Marin Bratanov
Telerik team
 answered on 01 Feb 2016
1 answer
146 views

Hi,

 i recently upgrade to 2016.1.113.35.

 i have some issues with AutoTooltipify="true" in radgrid

some control or cell are not "Tooltipify" at the end of the grid without js error.

Take a look on screenshot.

Is there a new limit number of control ?

 thanks

Marin Bratanov
Telerik team
 answered on 01 Feb 2016
3 answers
66 views

 

Hi, 

We have a desktop application used to edit specification documents. These docs are basically long outline-numbered lists with hierarchical list formatting. We've been wanting to move our application to the web, but haven't found an editor control with all the features we need. These are:

  • Support for hierarchical list numbering. I understand this is possible with your control even though it's not supported out-of-the-box.
  • Very solid import and export for RTF and DOCX, including support for those outline lists. We are willing to use a third-party library to convert the RadEditor's HTML to DOCX or RTF, if that's what it takes. We just want to know if it is possible at all. Users will be doing a LOT of this with our application.
  • Track changes, including preserving track changes in imported/exported documents. Users will work a lot of with existing documents, and will want to bring in documents that already have tracked changes in them. I understand you support tracked changes (very nice!) Just want to make sure the import/export is solid as well.
  • Paragraph identification. We need to track a paragraph throughout a document's lifecycle. We thought maybe a bookmark or maybe an anchor could be used for this.

What do you say--could our requirements be fulfilled with your product, or are we stuck in the Desktop world for a while longer?

Best Regards,

David

Ianko
Telerik team
 answered on 01 Feb 2016
1 answer
162 views

The ASMX web service below returns a file that when saved and referenced in the RadClientDataSource displays correct on my RadMap. However all attempts to point the RadClientDataSource directly at the web service result in no data being displayed on the RadMap.

 Please help

 

Imports System
Imports System.Web
Imports System.Collections
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Script.Serialization
Imports System.Web.Script.Services
Imports System.ComponentModel
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="d")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class SQLdataWH
Inherits System.Web.Services.WebService
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Function getPBayMachinePopulation() As String
Dim sqlConnection As SqlConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("BKDataWarehouseConnectionString").ConnectionString)
sqlConnection.Open()
Dim sqlCommand As SqlCommand = New SqlCommand("SELECT * FROM [BKDataWarehouse].[dbo].[uvw_PBAY_MachineLocationSummary]", sqlConnection)
Dim sqlDataset As DataSet = New DataSet()
Dim sqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(sqlCommand)
sqlDataAdapter.Fill(sqlDataset)
sqlConnection.Close()
'Dim MArray()() As String = New String(sqlDataset.Tables(0).Rows.Count - 1)() {}
Dim MArray(sqlDataset.Tables(0).Rows.Count - 1) As JSON_results
Dim i As Integer = 0
For Each rs As DataRow In sqlDataset.Tables(0).Rows
'MArray(i) = New String() {rs("Location").ToString(), rs("Population").ToString()}
MArray(i) = New JSON_results
MArray(i).City = rs("City")
MArray(i).Country = rs("Country")
MArray(i).Pop2010 = rs("Population")
MArray(i).Location(0) = rs("LATITUDE")
MArray(i).Location(1) = rs("LONGITUDE")
i = i + 1
Next
Dim js As JavaScriptSerializer = New JavaScriptSerializer()
Dim sJSON As String = js.Serialize(MArray)
Return sJSON
End Function
Public Class JSON_results
Private PoplationValue As Double
Private CityValue As String
Private CountryValue As String
Private LocationValue(1) As Double
Property Pop2010() As Double
Get
Return PoplationValue
End Get
Set(ByVal Value As Double)
PoplationValue = Value
End Set
End Property
Property City() As String
Get
Return CityValue
End Get
Set(ByVal Value As String)
CityValue = Value
End Set
End Property
Property Country() As String
Get
Return CountryValue
End Get
Set(ByVal Value As String)
CountryValue = Value
End Set
End Property
Property Location() As Double()
Get
Return LocationValue
End Get
Set(ByVal Value As Double())
LocationValue = Value
End Set
End Property
End Class
'Public Class LocationType
' Private LatitudeValue As Double
' Private LongitudeValue As Double
' Property Latitude() As Double
' Get
' Return LatitudeValue
' End Get
' Set(ByVal Value As Double)
' LatitudeValue = Value
' End Set
' End Property
' Property Longitude() As Double
' Get
' Return LongitudeValue
' End Get
' Set(ByVal Value As Double)
' LongitudeValue = Value
' End Set
' End Property
'End Class
End Class

Ianko
Telerik team
 answered on 01 Feb 2016
0 answers
114 views

Good Day 

 i am trying out the Telerik with a Trial Version, i am looking for a wizard control, and i came across telerik Wizard. i have a Wizard that creates the steps dynamically and add the usercontrols dynamically and it works perfectly.  

 in the user control that is shown on the Steps , there is a button. 

 

1) i cannot hit the breakpoints on the user control 

 2) if i click the button on the Step, the Wizard gets reset , all the dynamically created steps are removed i will have an empty wizard 

 Thanks 

 

Vuyiswa
Top achievements
Rank 2
 asked on 30 Jan 2016
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?