Telerik Forums
UI for ASP.NET AJAX Forum
2 answers
270 views
Hello All,

First Issue
 I am trying to use RadGrid and the data source for this comes from a webapi. I have successfully added the data to the RadGrid. But, the issues is that there are over 10,000 records the api returns and takes 20-30 min to load the RadGrid. To make things easy on data binding and loading, I have tried to create dynamic RadGrid. The idea is to call the api and return only 50 records on every page change. The pagination wont show because, I am retrieving only  50 records every time. So the first page shows up with 50 records and I cannot paginate as there are no pages showing up.

2nd issue
 
I need to add a search box and allow searching for a record. I could achieve this when I created radgrid using ASPX. But, dynamic creation of radgrid, I have to call the api's every time and load the grid again and then search for the data which (according to me) is inefficient. The same with export to CSV. I have to recreate the radgrid every time.


Are there any better ways to do this without dynamic radgrid, and still be able to paginate and call the api when ever the next page is clicked. I am using C#. I understand it will be hard for you all to picture what I am  trying to say, but, I really appreciate any help or suggestions or questions that guide me in the right direction.

Thank you in advance
Smart
Top achievements
Rank 1
 answered on 06 Nov 2013
1 answer
58 views

I have the below code to attempt to ajaxify my grid and subsequent detail panel. It works but the trouble is when I click my "select" link on a row, the style doesn't change to selected row as I have not re-drawn the grid (grid not part of the updated controls list).  I do this intentionally because I don't want to reload the entire grid if no data has changed (it is simply a row selection).  The grid also has sorting enabled which does not function unless I add the grid to the updated control list. So the question is, how to I retain server sorting control but also allow simple row selection without having to pull the whole grid down again?

Thanks



<AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="rgMemberList">
                    <UpdatedControls>
                      <telerik:AjaxUpdatedControl ControlID="pnlMemberDetail" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>

Viktor Tachev
Telerik team
 answered on 06 Nov 2013
1 answer
82 views
Hi,
I am binding a radgrid in a Usercontrol. I am Loading the User control in the PageLoad. Any Paging event is not called [Item Command is not executed ], Other events Like  sorting, rebind, export all performed item command event is called. Help me to overcome this issue.





Thanks
Viktor Tachev
Telerik team
 answered on 06 Nov 2013
2 answers
80 views
Please help me with this:

I have this problem between the old version and new version (2012.3.1038.40 vs 2013.3.1015.40)

I am using customized column editor (I want a drop-down, rather a free-style type field), pelase see the code in the end.

my question is, the following code works perfectly with version 2012.3.1038.40 (I know it is an old version)
but after I referred to the new Telerik.Web.UI with version 2013.3.1015.40, I got exception as below

[NullReferenceException: Object reference not set to an instance of an object.]
Telerik.Web.UI.GridTextBoxColumnEditor.CreateControls() +264
Telerik.Web.UI.GridColumnEditorBase.EnsureControlsCreated() +56
Telerik.Web.UI.GridColumnEditorBase.InitializeInControl(Control containerControl) +77
...
...

by setting debug line in customized editor class, I found out that with the new version, AddControlsToContainer() never get called

If I switch back the old DLL version, everything is just working fine.

we are desperately looking for help!!!
Just cannot upgrade any newer version

Thanks in advance


//Here is the event to create my own column editor
//
protected void RadGridMHomeMCM_CreateColumnEditor(object sender, GridCreateColumnEditorEventArgs e)
{
    if (e.Column is GridBoundColumn && e.Column.UniqueName.StartsWith("CAP"))
    {
        e.ColumnEditor = new ClsCustomDropDownList();
    }
}

//Here is my column editor class
//
private class ClsCustomDropDownList : GridTextBoxColumnEditor
{
    private RadComboBox ddlEditor;

    protected override void CreateControls()
    {
        this.ddlEditor = new RadComboBox();
        this.ddlEditor.Items.Add(new RadComboBoxItem("Yes", "Yes"));
        this.ddlEditor.Items.Add(new RadComboBoxItem("No", "No"));
    } 

    protected override void LoadControlsFromContainer()
    {
        this.ddlEditor = this.ContainerControl.Controls[0] as RadComboBox;
    }

    public override bool IsInitialized
    {
        get { return this.ddlEditor != null; }
    }

    public override string Text
    {
         get { return this.ddlEditor.Text; }
         set { this.ddlEditor.Text = value; }
    }

    protected override void AddControlsToContainer()
    {
         ddlEditor = new RadComboBox();
         ddlEditor.Items.Add(new RadComboBoxItem("Yes", "Yes"));
         ddlEditor.Items.Add(new RadComboBoxItem("No", "No"));

         this.EnsureControlsCreated(); 
         this.ContainerControl.Controls.Add(this.ddlEditor);
    }

}
Peter
Top achievements
Rank 1
 answered on 06 Nov 2013
4 answers
80 views
Hai,

I did some changes to the webmail sample ( http://demos.telerik.com/aspnet-ajax/webmail/ ) in order to perform the function of Create, Update and Delete. The following is the code on default.aspx

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="Inbox" Title="Telerik Web Mail Demo - Inbox" %>
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <telerik:RadAjaxManager runat="server" ID="RadAjaxManager1">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="DetailsView1" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="RadTreeView1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="RadToolBar1" />
                    <telerik:AjaxUpdatedControl ControlID="DetailsView1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                    <telerik:AjaxUpdatedControl ControlID="DetailsView1" LoadingPanelID="RadAjaxLoadingPanel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>
    <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1">
    </telerik:RadAjaxLoadingPanel>
    <telerik:RadTreeView runat="Server" ID="RadTreeView1" OnNodeClick="RadTreeView1_NodeClick"
        EnableViewState="false">
        <Nodes>
            <telerik:RadTreeNode Text="John Smith" Expanded="true" ImageUrl="Images/mailbox.gif"
                PostBack="false">
                <Nodes>
                    <telerik:RadTreeNode Text="Calendar" ImageUrl="Images/calendar.gif" NavigateUrl="Calendar.aspx" />
                    <telerik:RadTreeNode Text="Contacts" ImageUrl="Images/contacts.gif" NavigateUrl="Contacts.aspx" />
                    <telerik:RadTreeNode Text="Inbox" ImageUrl="Images/inbox.gif" Expanded="true" Selected="True">
                        <Nodes>
                            <telerik:RadTreeNode Text="AJAX" ImageUrl="Images/inbox.gif" />
                            <telerik:RadTreeNode Text="Announcements" ImageUrl="Images/inbox.gif" />
                            <telerik:RadTreeNode Text="OpenAccess ORM" ImageUrl="Images/inbox.gif" />
                            <telerik:RadTreeNode Text="Silverlight" ImageUrl="Images/inbox.gif" />
                            <telerik:RadTreeNode Text="WinForms" ImageUrl="Images/inbox.gif" />
                            <telerik:RadTreeNode Text="WPF" ImageUrl="Images/inbox.gif" />
                        </Nodes>
                    </telerik:RadTreeNode>
                    <telerik:RadTreeNode Text="Notes" ImageUrl="Images/notes.gif" NavigateUrl="Notes.aspx" />
                </Nodes>
            </telerik:RadTreeNode>
        </Nodes>
    </telerik:RadTreeView>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" runat="Server">
    <telerik:RadScriptBlock runat="server" ID="RadScriptBlock1">
 
        <script type="text/javascript">
            /* <![CDATA[ */
            var toolbar;
            var grid;
            var searchButton;
            var ajaxManager;
 
            function pageLoad() {
                grid = $find("<%=RadGrid1.ClientID %>");
                toolbar = $find("<%= RadToolBar1.ClientID %>");
                ajaxManager = $find("<%=RadAjaxManager1.ClientID %>");
 
                if (grid.get_masterTableView().get_selectedItems().length == 0)
                    toolbar.findButtonByCommandName("reply").disable();
 
                searchButton = toolbar.findButtonByCommandName("doSearch");
 
                $telerik.$(".inbox-search-textbox")
                            .bind("keypress", function(e) {
                                searchButton.set_imageUrl("images/search.gif");
                                searchButton.set_value("search");
                            });
            }
 
            function onKeyPress(sender, args) {
                if (args.get_keyCode() == 13) {
                    args.get_domEvent().stopPropagation();
                    args.get_domEvent().preventDefault();
                    performSearch(sender);
                    return;
                }
            }
 
            function onButtonClicked(sender, args) {
                var commandName = args.get_item().get_commandName();
                if (commandName == "doSearch") {
                    var searchTextBox = sender.findButtonByCommandName("searchText").findControl("RadTextBox1");
                    if (searchButton.get_value() == "clear") {
                        searchTextBox.set_value("");
                        searchButton.set_imageUrl("images/search.gif");
                        searchButton.set_value("search");
                    }
 
                    performSearch(searchTextBox);
                } else if (commandName == "reply") {
                    window.radopen(null, "Edit");
                }
            }
 
            function performSearch(searchTextBox) {
                if (searchTextBox.get_value()) {
                    searchButton.set_imageUrl("images/clear.gif");
                    searchButton.set_value("clear");
                }
 
                ajaxManager.ajaxRequest(searchTextBox.get_value());
            }
 
            function onGridRowSelected(sender, args) {
                toolbar.findButtonByCommandName("reply").enable();
            }
             
            function onWindowLoad(sender, args) {
 
                var html = "<br /><br /><br /><hr />" +
                            "<strong>From:</strong> " + $get("from").innerHTML + "<br />" +
                            "<strong>Sent:</strong> " + $get("sent").innerHTML + "<br />" +
                            "<strong>Subject:</strong> " + $get("subject").innerHTML + "<br />" +
                             
                            $get("message-body").innerHTML;
                 
                sender.get_contentFrame().contentWindow.setEditorContent(html);
            }
            /* ]]> */
        </script>
 
    </telerik:RadScriptBlock>
    <telerik:RadWindowManager runat="Server" ID="RadWindowManager1" EnableViewState="false">
        <Windows>
            <telerik:RadWindow runat="server" ID="Edit" NavigateUrl="~/Reply.aspx" OnClientPageLoad="onWindowLoad"
                Width="870px" Height="550px" ReloadOnShow="true"
                ShowContentDuringLoad="false" Modal="True" Behaviors="Close,Move" VisibleStatusbar="false">
            </telerik:RadWindow>
        </Windows>
    </telerik:RadWindowManager>
    <telerik:RadSplitter runat="server" ID="RadSplitter1" Width="100%" BorderSize="0"
        BorderStyle="None" PanesBorderSize="0" Height="100%" Orientation="Horizontal">
        <telerik:RadPane runat="server" ID="RadPane1" Height="32px" EnableViewState="false" Scrollable="false">
            <telerik:RadToolBar runat="server" ID="RadToolBar1" CssClass="inbox-search-toolbar"
                OnClientButtonClicked="onButtonClicked" EnableViewState="false">
                <Items>
                    <telerik:RadToolBarButton ImageUrl="~/Images/print.gif" Enabled="false" />
                    <telerik:RadToolBarButton ImageUrl="~/Images/move.gif" Enabled="false" />
                    <telerik:RadToolBarButton ImageUrl="~/Images/delete_inbox.gif" Enabled="false" />
                    <telerik:RadToolBarButton IsSeparator="true" />
                    <telerik:RadToolBarButton Text="Reply" ImageUrl="~/Images/reply.gif" CommandName="reply" />
                    <telerik:RadToolBarButton Value="searchTextBoxButton" CommandName="searchText">
                        <ItemTemplate>
                            <telerik:RadTextBox
                                runat="server" ID="RadTextBox1"
                                EmptyMessage="Search Inbox"
                                CssClass="inbox-search-textbox" Width="300px"
                                ClientEvents-OnKeyPress="onKeyPress" />
                        </ItemTemplate>
                    </telerik:RadToolBarButton>
                    <telerik:RadToolBarButton ImageUrl="~/Images/search.gif" Value="search" CommandName="doSearch" />
                </Items>
            </telerik:RadToolBar>
        </telerik:RadPane>
        <telerik:RadPane runat="server" ID="RadPane2">
            <telerik:RadGrid Skin="Vista" AutoGenerateDeleteColumn="True"
                AutoGenerateEditColumn="True" ShowGroupPanel="True"
                runat="server" DataSourceID="LinqDataSource1" AllowAutomaticDeletes="True" AllowAutomaticInserts="True"
                AllowAutomaticUpdates="True" AllowPaging="True" PageSize="8" AllowSorting="True"
                AllowFilteringByColumn="True" ID="RadGrid1" CellSpacing="0"
                GridLines="None">
                <MasterTableView CommandItemDisplay="Top" AutoGenerateColumns="False">
                    <%--<GroupByExpressions>
                        <telerik:GridGroupByExpression>
                            <SelectFields>
                                <telerik:GridGroupByField FieldName="ParentId" />
                            </SelectFields>
                            <GroupByFields>
                                <telerik:GridGroupByField FieldName="ParentId" />
                            </GroupByFields>
                        </telerik:GridGroupByExpression>
                    </GroupByExpressions>--%>
                    <CommandItemSettings ExportToPdfText="Export to PDF" />
                    <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column"
                        Visible="True">
                    </RowIndicatorColumn>
                    <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"
                        Visible="True">
                    </ExpandCollapseColumn>
                    <Columns>
                        <telerik:GridBoundColumn DataField="CustomerID"
                            FilterControlAltText="Filter CustomerID column" HeaderText="CustomerID"
                            SortExpression="CustomerID" UniqueName="CustomerID">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="CompanyName"
                            FilterControlAltText="Filter CompanyName column" HeaderText="CompanyName"
                            SortExpression="CompanyName" UniqueName="CompanyName">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="ContactName"
                            FilterControlAltText="Filter ContactName column" HeaderText="ContactName"
                            SortExpression="ContactName" UniqueName="ContactName">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="ContactTitle"
                            FilterControlAltText="Filter ContactTitle column" HeaderText="ContactTitle"
                            SortExpression="ContactTitle" UniqueName="ContactTitle">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Address"
                            FilterControlAltText="Filter Address column" HeaderText="Address"
                            SortExpression="Address" UniqueName="Address">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="City"
                            FilterControlAltText="Filter City column" HeaderText="City"
                            SortExpression="City" UniqueName="City">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Region"
                            FilterControlAltText="Filter Region column" HeaderText="Region"
                            SortExpression="Region" UniqueName="Region">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="PostalCode"
                            FilterControlAltText="Filter PostalCode column" HeaderText="PostalCode"
                            SortExpression="PostalCode" UniqueName="PostalCode">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Country"
                            FilterControlAltText="Filter Country column" HeaderText="Country"
                            SortExpression="Country" UniqueName="Country">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Phone"
                            FilterControlAltText="Filter Phone column" HeaderText="Phone"
                            SortExpression="Phone" UniqueName="Phone">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Fax"
                            FilterControlAltText="Filter Fax column" HeaderText="Fax" SortExpression="Fax"
                            UniqueName="Fax">
                        </telerik:GridBoundColumn>
                        <telerik:GridCheckBoxColumn DataField="Bool" DataType="System.Boolean"
                            FilterControlAltText="Filter Bool column" HeaderText="Bool"
                            SortExpression="Bool" UniqueName="Bool">
                        </telerik:GridCheckBoxColumn>
                    </Columns>
                    <EditFormSettings>
                        <EditColumn FilterControlAltText="Filter EditCommandColumn column">
                        </EditColumn>
                    </EditFormSettings>
                    <PagerStyle PageSizeControlType="RadComboBox" />
                </MasterTableView>
                <ClientSettings AllowColumnsReorder="true" AllowDragToGroup="true">
                </ClientSettings>
                <PagerStyle PageSizeControlType="RadComboBox" />
                <FilterMenu EnableImageSprites="False">
                </FilterMenu>
            </telerik:RadGrid>
            <asp:LinqDataSource runat="server" ID="LinqDataSource1" ContextTypeName="HelpDeskDataContext"
                TableName="Customers"  EnableInsert="True" EnableUpdate="true" EnableDelete="true" OrderBy="CustomerID">
            </asp:LinqDataSource>
        </telerik:RadPane>
    </telerik:RadSplitter>
</asp:Content>

and the following code in Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Data.SqlClient;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Telerik.Web.UI;
 
public partial class Inbox : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            RadGrid1.Rebind();
            //SelectFirstGridRow();
        }
    }
 
    //private void SelectFirstGridRow()
    //{
    //    GridDataItem firstDataItem = RadGrid1.Items.OfType<GridDataItem>().FirstOrDefault();
    //    if (firstDataItem != null)
    //        firstDataItem.Selected = true;
    //}
     
    protected void RadTreeView1_NodeClick(object sender, RadTreeNodeEventArgs e)
    {
        RadGrid1.Rebind();
        //SelectFirstGridRow();
        RadTextBox searchTextBox =
            (RadTextBox)((RadToolBarButton) RadToolBar1.FindButtonByCommandName("searchText")).FindControl("RadTextBox1");
        searchTextBox.Text = string.Empty;
    }
 
    //private string searchString;
 
    //protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    //{
    //    searchString = e.Argument.ToLower();
    //    RadGrid1.Rebind();
    //}
 
    //protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
    //{
       
        
    //}
}

I took customers table from  helpdesk.mdf database and successfully displayed when running its program. When i click add new record,all of the fields in the customer table appears but when I clicked insert nothing happens and data can not be inserted into the database. A similar thing happens when i click edit and also delete no data is erased. could you help me to resolve my problem?

Regards
Irwan

Marin
Telerik team
 answered on 06 Nov 2013
5 answers
115 views
Hi,

We're having an issue with a RadGrid when there are no records returned.   Here's the scenario - this grid has several columns in it that are either hidden or visible based on a boolean value.  When the grid has data bound to it, I am able to scroll completely to the right and view all of the columns.  But when there are no records bound to the grid, the scrollbar will not allow the user to scroll all the way to the right.  I double checked this by moving my last column up two or three in the sequence - once I did that, I was able to view the moved column, but the two columns before it are now not visible. 

Is there a way to force the scrollbar to "reset" after the columns have been setup? 

Thanks,
Jerry
Pavlina
Telerik team
 answered on 06 Nov 2013
1 answer
70 views
Pressing enter on a combobox that allows custom text causes the selected event to fire.  My handler for the event does a get_item(), which returns a null value.  This problem seems to be a repeat of this problem that was determined to be a bug and then fixed:

http://www.telerik.com/community/forums/aspnet-ajax/combobox/radcombobox-selection-changes-on-enter-press.aspx

I don't need a reply; I have found a workaround.  But this does appear to be a problem that should be addressed.
Hristo Valyavicharski
Telerik team
 answered on 06 Nov 2013
1 answer
106 views
I am trying to use Jquery UI dialog one of my pages. Here is the code I have. But this doesn't work. I am using 2013.2.611.40 version controls.

Master page:
------------------------
<head runat="server">
    <link href="../css/ui-lightness/jquery-ui-1.10.3.custom.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server" OutputCompression="AutoDetect">
    <Scripts>
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
        <asp:ScriptReference Path="../Scripts/jquery-ui-1.10.3.custom.js" />
    </Scripts>
    </telerik:RadScriptManager>
    <script type="text/javascript">
        window.jQuery = window.$ = $telerik.$;
    </script>

.aspx page:
----------------------------------
 <script type="text/javascript">
     $telerik.$(document).ready(function () {
            $("#dialog").dialog('open');
        });
</script>

I am getting object doesn't support this property or method at this line ' $("#dialog").dialog('open');' Could you please let me know what could be wrong?
nav100
Top achievements
Rank 1
 answered on 06 Nov 2013
3 answers
81 views
Hi,

I am having problems using virtualization on tablets (IOS 7, Windows RT 8.1).
In your demo I can't get past the first 100 items when scrolling by swiping!

Regards
Andreas
Milena
Telerik team
 answered on 06 Nov 2013
8 answers
139 views
Hi,

I have CellTemplate for each PivotGridRowField which is an User Control. For the first load everything works fine, but when I reorder, template is lost and instead cell normal text is displayed. Please download project from below link to see how it happens. Just replace ItemGroup with InventSite using "Drag to Reorder", you will see ItemGroup is not using template. But after than, if you expand any of ItemGroup it binds to template again. I am using version 2013.1.417.40

Download link
Tim
Top achievements
Rank 1
 answered on 06 Nov 2013
Narrow your results
Selected tags
Tags
+? more
Top users last month
Jay
Top achievements
Rank 3
Bronze
Iron
Iron
yw
Top achievements
Rank 2
Iron
Iron
Stefan
Top achievements
Rank 2
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Bohdan
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Jay
Top achievements
Rank 3
Bronze
Iron
Iron
yw
Top achievements
Rank 2
Iron
Iron
Stefan
Top achievements
Rank 2
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Bohdan
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?