Telerik Forums
UI for ASP.NET AJAX Forum
14 answers
748 views
I am trying to use a custom skin on a gird.  I have the skin created and working in most instances except this one: 

http://www.telerik.com/DEMOS/ASPNET/Prometheus/Controls/Examples/Integration/GridEditors/DefaultCS.aspx

When I set the skin on the grid to:

Skin

="DWDS" EnableEmbeddedSkins="false"


and declare the css:

<

link href="/Skins/DWDS/Grid.DWDS.css" rel="stylesheet" type="text/css" />

<

link href="/Skins/DWDS/Calendar.DWDS.css" rel="stylesheet" type="text/css" />

<

link href="/Skins/DWDS/Editor.DWDS.css" rel="stylesheet" type="text/css" />


the images for the datetimepicker do not show.  When I look at the properties the image path is not correct.  I have set the ImagesPath for the grid images (although I have only seen this make a difference on the paging images - am I using if wrong?)

How do I get the correct images for the column editors when using a custom skin?

I also can't get the code to update the data base.  The two dates (start and end) get submitted but the two 

GridHTMLEditorColumn

send null (on Firefox but on IE 7 they send the value).  Part of this problem stems from the Editor picking up some of the styles from my sites stylesheet.  I will post that in the Editor section.

<asp:Content ID="myBody" runat="server" ContentPlaceHolderID="cphBody">  
<link href="/Skins/DWDS/Grid.DWDS.css" rel="stylesheet" type="text/css" /> 
<link href="/Skins/DWDS/Calendar.DWDS.css" rel="stylesheet" type="text/css" /> 
<link href="/Skins/DWDS/Editor.DWDS.css" rel="stylesheet" type="text/css" /> 
<h2>Calendar Management</h2> 
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">  
        <AjaxSettings> 
            <telerik:AjaxSetting AjaxControlID="RadGrid2">  
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGrid2" LoadingPanelID="RadAjaxLoadingPanel1" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
        </AjaxSettings> 
    </telerik:RadAjaxManager> 
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Height="75px" Width="75px" Transparency="25">  
        <img alt="Loading..." src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' style="border:0;" /> 
    </telerik:RadAjaxLoadingPanel> 
    <telerik:RadGrid ID="RadGrid2" runat="server" AllowAutomaticInserts="True" AllowAutomaticDeletes="True" AllowAutomaticUpdates="True" Width="100%" AutoGenerateColumns="false" 
        AllowPaging="true" PageSize="15" DataSourceID="SqlDataSource1" AllowSorting="true" Skin="DWDS" EnableEmbeddedSkins="false" ImagesPath="/Skins/DWDS/Grid/">  
        <MasterTableView CommandItemDisplay="Top" DataKeyNames="ID"  Width="100%" EditMode="EditForms">  
            <CommandItemTemplate> 
                <asp:LinkButton Style="vertical-align: bottom" ID="btnEditSelected" runat="server" CommandName="EditSelected" Visible='<%# RadGrid2.EditIndexes.Count == 0 %>'>  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Edit.gif" /> Edit Calendar Entry  
                </asp:LinkButton> 
                <asp:LinkButton ID="btnUpdateEdited" runat="server" CommandName="UpdateEdited" Visible='<%# RadGrid2.EditIndexes.Count > 0 %>'>  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Update.gif" /> Update Calendar  
                </asp:LinkButton> 
                &nbsp;  
                <asp:LinkButton ID="btnCancel" runat="server" CommandName="CancelAll" Visible='<%# RadGrid2.EditIndexes.Count > 0 || RadGrid2.MasterTableView.IsItemInserted %>'>  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Cancel.gif" /> Cancel editing  
                </asp:LinkButton> 
                &nbsp;  
                <asp:LinkButton ID="LinkButton2" runat="server" CommandName="InitInsert" Visible='<%# !RadGrid2.MasterTableView.IsItemInserted %>'>  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/AddRecord.gif" /> Add new Calendar Entry</asp:LinkButton> 
                <asp:LinkButton ID="LinkButton3" runat="server" CommandName="PerformInsert" Visible='<%# RadGrid2.MasterTableView.IsItemInserted %>'>  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Insert.gif" /> Add this Entry</asp:LinkButton> 
                &nbsp;  
                <asp:LinkButton ID="LinkButton1" OnClientClick="javascript:return confirm('Delete all selected calendar entries?')" runat="server" CommandName="DeleteSelected" > 
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Delete.gif" /> Delete Selected Entries  
                </asp:LinkButton> 
                &nbsp;&nbsp;&nbsp;  
                <asp:LinkButton ID="LinkButton4" runat="server" CommandName="RebindGrid">  
                    <img style="border:0px" alt="" src="/Skins/DWDS/Grid/Refresh.gif" /> Refresh Calendar list  
                </asp:LinkButton> 
                <br /> 
                &nbsp;  
            </CommandItemTemplate> 
             <Columns> 
                <telerik:GridEditCommandColumn ButtonType="ImageButton" UpdateImageUrl="/Skins/DWDS/Grid/Update.gif" 
                    EditImageUrl="/Skins/DWDS/Grid/Edit.gif" InsertImageUrl="/Skins/DWDS/Grid/Insert.gif" 
                    CancelImageUrl="/Skins/DWDS/Grid/Cancel.gif" UniqueName="EditCommandColumn">  
                    <HeaderStyle Width="25px" /> 
                </telerik:GridEditCommandColumn> 
                <telerik:GridButtonColumn ConfirmText="Delete this entry?" ButtonType="ImageButton" ImageUrl="/Skins/DWDS/Grid/Delete.gif" CommandName="Delete" Text="Delete" UniqueName="DeleteColumn">  
                    <HeaderStyle Width="25px" /> 
                    <ItemStyle Width="25px" /> 
                </telerik:GridButtonColumn> 
                  
                <telerik:GridBoundColumn DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" UniqueName="ID" Visible="False" /> 
                <telerik:GridDateTimeColumn HeaderText="Start Time/Date" UniqueName="st" DataField="EventDateBeg" PickerType="DateTimePicker" /> 
                <telerik:GridDateTimeColumn HeaderText="End Time/Date" UniqueName="et" DataField="EventDateEnd" PickerType="DateTimePicker" /> 
                <telerik:GridHTMLEditorColumn HeaderText="Entry Name" UniqueName="EventName" DataField="EventName" /> 
                <telerik:GridHTMLEditorColumn HeaderText="Entry Description" UniqueName="EventDescription" DataField="EventDescription" /> 
                  
                  
            </Columns> 
            <EditFormSettings CaptionDataField="EventDateBeg" CaptionFormatString="Edit properties of Calendar Entry: {0}"  > 
                <FormTableItemStyle Wrap="False" Width="300px"></FormTableItemStyle> 
                <FormCaptionStyle CssClass="EditFormHeader"></FormCaptionStyle> 
                <FormMainTableStyle GridLines="Horizontal" CellSpacing="10" CellPadding="10" BackColor="White" /> 
                <FormTableStyle CellSpacing="5" CellPadding="5" CssClass="module" Height="110px" BackColor="White" /> 
                <FormTableAlternatingItemStyle Wrap="False"></FormTableAlternatingItemStyle> 
                <EditColumn ButtonType="ImageButton" UpdateImageUrl="/Skins/DWDS/Grid/Update.gif" 
                    EditImageUrl="/Skins/DWDS/Grid/Edit.gif" InsertImageUrl="/Skins/DWDS/Grid/Insert.gif" 
                    CancelImageUrl="/Skins/DWDS/Grid/Cancel.gif" InsertText="Insert Order" UpdateText="Update record" 
                    UniqueName="EditCommandColumn1" CancelText="Cancel edit">  
                </EditColumn> 
                <FormTableButtonRowStyle HorizontalAlign="Left" CssClass="EditFormButtonRow"></FormTableButtonRowStyle> 
            </EditFormSettings> 
        </MasterTableView> 
    </telerik:RadGrid> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:oConnDW %>" SelectCommand="Calendar_List" SelectCommandType="StoredProcedure" 
        UpdateCommand="Calendar_Update_B" UpdateCommandType="StoredProcedure" DeleteCommand="Calendar_Delete_By_ID" DeleteCommandType="storedprocedure" InsertCommand="Calendar_Insert_B" 
        InsertCommandType="storedprocedure">  
        <UpdateParameters> 
            <asp:Parameter Name="EventDateBeg" Type="datetime" /> 
            <asp:Parameter Name="EventDateEnd" Type="datetime" /> 
            <asp:Parameter Name="EventName" Type="string" /> 
            <asp:Parameter Name="EventDescription" Type="string" /> 
        </UpdateParameters> 
        <InsertParameters> 
            <asp:Parameter Name="EventDateBeg" Type="datetime" /> 
            <asp:Parameter Name="EventDateEnd" Type="datetime" /> 
            <asp:Parameter Name="EventName" Type="string" /> 
            <asp:Parameter Name="EventDescription" Type="string" /> 
        </InsertParameters> 
        <DeleteParameters> 
            <asp:Parameter Name="ID" Type="int16" /> 
        </DeleteParameters> 
    </asp:SqlDataSource> 
 
</asp:Content> 


The code behind adds a project ID to the SQL statement but that is it.

Any ideas on how to use custom skins with this?

Thanks


chris
Top achievements
Rank 1
 answered on 29 Jan 2009
2 answers
114 views
I have a radgrid with 10 column which need multi sorting but I have to limit to three column.
Like,

ID   FIRST   LAST   TEL   EMAIL
1       2           3
But if he clicks 'TEL' now, then
ID   FIRST   LAST   TEL    EMAIL
         1           2         3
Anyone can help me out..If possible I need to switch images to indicate three column differently?


Thanks,
DIP
Dip
Top achievements
Rank 1
 answered on 29 Jan 2009
1 answer
185 views

Hello, I am using the RadGrid from the Prometheus release, version 2007.3.1425.20 in a .Net 2.0 application. We are trying to raise an event up from a user control to it's parent container. The set up is a RadGrid control is contained within a user control placed in a parent aspx page that uses a master page.  The user control's parent aspx page's OnBubbleEvent never gets control. The code used for this follows. Any help would be appreciated. All I can think of is that the RadGrid has an OnBubbleEvent and returns false so it never bubbles, but I am not sure.

The following code is called form the linkbutton and contains the RaiseBubbleEvent:

    protected void getSelectedItems(object sender, EventArgs e)
    {
        //iterate through selection and add selected items to collection
        foreach (GridDataItem item in grdBlocklist.MasterTableView.Items)
        {
            if (((CheckBox)item.FindControl("chkDisable")).Checked)
            {
                _items.Add(new BlockList(0, item["BillTo"].Text, item["ShipTo"].Text, item["SoldTo"].Text,
                    null, null, DateTime.Now.ToString(), item["BrandDesc"].Text, _type));
            }
        }

        //...then raise event to parent
        RaiseBubbleEvent(sender, e);
    }

The linkbutton that start this train was added by this code:

    protected void grdBlocklist_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
    {
        if (e.Item is GridHeaderItem)
        {
            GridHeaderItem header = (GridHeaderItem)e.Item;
            LinkButton btn = new LinkButton();

            btn.Text = (_editMode ? "[block]" : "[unblock]");

            btn.Command += new CommandEventHandler(getSelectedItems);
            header["disable"].Controls.AddAt(0, btn);
        }
    }

However the parent container's following code block is not hit:

    protected void OnBubbleEvent(object sender, EventArgs e)
    {
        try
        {
            foreach (BlockList item in this.ctlBlocklistTelerik1.Items)
            {
                //check if this is a block or unblock
                if (this.ctlBlocklistTelerik1.EditMode)
                    item.Block();
                else
                    item.UnBlock();
            }

            //rebuild list
            rebindBlocklist();
        }
        catch (Exception oEX)
        {
            throw;
        }
    }

Thanks

Paul Martissa
Top achievements
Rank 1
 answered on 29 Jan 2009
1 answer
118 views
Bonjour,

I have a grid set with option  grd.GroupingSettings.CaseSensitive = false;

Is it a bug or normal that equal A is != then a when CaseSensitive is false...
Contains work properly
Greater than work properly

Thanks!
Daniel
Telerik team
 answered on 29 Jan 2009
1 answer
123 views
I've searched through the forum postings and documentation looking for an alternative place to bind the RadComboBox when it is used a filtering control assigned in the MyCustomFilteringColumn class.  The examples I've seen usually bind the data to the combo box in the SetupFilterControls method of the MyCustomFilteringColumn class.  I am trying to use my business objects and the data binding framework used throughout my application to perform the data binding for the filtering control on my web page.

I can successfully bind my filtering control in the page_load handler the first time the page is displayed, however, any other action on the RadGrid losses my data in the RadComboBox.

I was wondering if there is an event handler for RadGrid where I could get an instance of the actual RadComboBox used as the filter control that is created in the SetupFilterControls method?
alo
Top achievements
Rank 1
 answered on 29 Jan 2009
3 answers
272 views
I just installed Q3 2008 but there is no Telerik.web.ui.dll  while other programer has RadControls_for_ASP.NET_AJAX_2008_2_1001_dev installed which has Telerik.web.ui.dll. What is the difference between these two versions or am I missing something?

Syed
Daniel
Telerik team
 answered on 29 Jan 2009
1 answer
170 views
I am attempting to build a RadGrid programmatically utilizing GridDropDownColumns.  Each GridDropDownColumn will need to be bound to a DataSource object for population.  The DataSourceID specified will always throw the error: Cannot find DataSourceControl with ID 'xxx'.  Is this an issue with dynamic column creation and binding or is there another way to populate the GridDropDownColumn server-side?

HTML code:
<telerik:RadPageView runat="server" ID="viewXX" /> //Control to load the RadGrid into
<asp:XmlDataSource ID="XmlDataSource1" runat="server">  
                <Data>
                    <Items>
                          <Item Value="Ms" Text="Ms."/>  
                          <Item Value="Dr" Text="Dr."/>  
                          <Item Value="Mrs" Text="Mrs."/>  
                          <Item Value="Mr" Text="Mr."/>  
                    </Items>
                </Data>
</asp:XmlDataSource>

C# code:
RadGrid radgrid = new RadGrid();
GridDropDownColumn boundColumnList = new GridDropDownColumn();
boundColumnList.DataSourceID = "XmlDataSource1";
radgrid.MasterTableView.Columns.Add(boundColumnList);

Todd
Top achievements
Rank 1
 answered on 29 Jan 2009
1 answer
171 views
Hi,
 We are moving our project using above version(2008.2.1001.20) rad controls.
1) In the case of Rad Grid, the "Telerik.WebControls.RadGrid" is working fine with self Hierarchy settings. It is clearly showing  parent and child relationship.
2) But if we use the above version Rad Grid, it is not showing the self Hierarchy properly.
3) Whenever we add new child record for a parent, it's showing separate record in the Grid.
4)Also we are using MasterTableView  filter expression as  follows in the "Telerik.WebControls.RadGrid" Version RadGrid.
 RadGrid1.MasterTableView.FilterExpression = "ParentID='  ' "; ( in page load event).
5) If we are moving same code to above version Rad Grid, Self Hierarchy settings   is not working properly.

Can someone help me with this ASAP as this is an urgent requirement?

Regards
Amit Mondal.






Georgi Krustev
Telerik team
 answered on 29 Jan 2009
1 answer
79 views
I have a ODBC connection to an informix database that is populating incremental 30 minutes of data.  Here is the aspx and the vb.  Basically I don't need to have all series to show.  I only need the total as the x-axis and y datalabel as starttime.  At the moment they post but I get a huge blank space in the chart I assuming that is the series for the starttime.  I need to have that removed as well as the choices in the datatable.  Thanks in advance.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> 
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Charting" TagPrefix="cc1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head> 
<body> 
    <form id="form1" runat="server">  
    <div> 
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">  
        </telerik:RadScriptManager> 
        <asp:DropDownList ID="DropDownList1" runat="server" Width="89px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True">  
            <asp:ListItem>1401</asp:ListItem> 
            <asp:ListItem>1406</asp:ListItem> 
            <asp:ListItem>1426</asp:ListItem> 
            <asp:ListItem>1059</asp:ListItem> 
        </asp:DropDownList> 
        <br /> 
    </div> 
    <telerik:RadChart ID="RadChart1" runat="server" Width="850px">  
        <PlotArea> 
            <EmptySeriesMessage Visible="True">  
                <Appearance Visible="True">  
                </Appearance> 
            </EmptySeriesMessage> 
        </PlotArea> 
    </telerik:RadChart> 
    <br /> 
    <telerik:RadGrid ID="RadGrid1" runat="server">  
    </telerik:RadGrid> 
    </form> 
</body> 
</html> 
 

Imports System.IO  
Imports System.Data.SqlClient  
Imports System.Collections.Specialized  
Imports System.Diagnostics  
Imports System.Web.UI.HtmlControls  
'Imports Telerik.Windows.Controls.Charting  
Imports System  
Imports System.Data  
Imports System.Configuration  
Imports System.Collections  
Imports System.Web  
Imports System.Web.Security  
Imports System.Web.UI  
Imports System.Web.UI.WebControls  
Imports System.Web.UI.WebControls.WebParts  
Imports Telerik.Charting  
Imports Telerik.Web.UI  
Imports System.Data.Odbc  
Imports System.Data.OleDb  
 
Partial Class _Default  
    Inherits System.Web.UI.Page  
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  
        RadChart1.ChartTitle.Visible = False 
 
        RadChart1.Legend.Visible = False 
        If Not Page.IsPostBack Then  
            RadChart1.Visible = False 
        End If  
 
    End Sub  
 
 
    Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged  
 
        Dim i As Integer  
        Dim x As Integer  
        Dim totalacd As Integer  
        Dim str As StringString = String.Empty  
        Dim dte As StringString = String.Empty  
        Dim cmd As OdbcCommand  
        Dim cmd2 As OdbcCommand  
        Dim swhere As String  
        Dim swhere2 As String  
        Dim conn As New OdbcConnection  
        Dim inttotal As Integer  
        Dim average As Integer  
 
        conn.ConnectionString = ("DSN='';uid='';pwd=''")  
        conn.Open()  
 
        swhere = "select * from hsplit where row_date = TODAY - 1 OR row_date = TODAY AND split = " & DropDownList1.SelectedValue.ToString() & ""  
        swhere2 = "SELECT DISTINCT row_date, starttime FROM hsplit WHERE row_date = Today OR row_date = TODAY - 1 ORDER BY row_date DESC, starttime DESC" 
 
        cmd = New OdbcCommand(swhere, conn)  
        cmd2 = New OdbcCommand(swhere2, conn)  
 
        Dim dt As New DataSet1.DataTable1DataTable  
        Dim dt2 As New DataSet1.DataTable2DataTable  
        Dim dt3 As New DataSet1.DataTable3DataTable  
 
        Dim da As OdbcDataAdapter  
        Dim da2 As OdbcDataAdapter  
 
        dt.Clear()  
        dt2.Clear()  
 
        cmd.ExecuteNonQuery()  
        cmd2.ExecuteNonQuery()  
 
        da = New OdbcDataAdapter(cmd)  
        da2 = New OdbcDataAdapter(cmd2)  
 
        da.Fill(dt)  
        da2.Fill(dt2)  
 
        totalacd = 0 
        inttotal = 0 
        average = 0 
 
        For x = 0 To 14  
            For i = 0 To dt.Rows.Count() - 1  
                Try  
                    If dt2.Rows(x).Item("starttime") <> Nothing Then  
                        Try  
                            If dt.Rows(i).Item("starttime").ToString = dt2.Rows(x).Item("starttime").ToString Then  
                                totalacdtotalacd = totalacd + dt.Rows(i).Item("acdcalls").ToString  
                                inttotalinttotal = inttotal + 1  
                            End If  
                            str = dt2.Rows(x).Item("starttime").ToString  
                            dte = dt2.Rows(x).Item("row_date").ToString  
                        Catch ex As Exception  
                            average = 0 
                            str = dt2.Rows(x).Item("starttime").ToString  
                            dte = dt2.Rows(x).Item("row_date").ToString  
                        End Try  
                    End If  
                Catch ex As Exception  
                    average = 0 
                End Try  
            Next  
 
            Dim newCustomersRow As DataSet1.DataTable3Row  
            newCustomersRow = dt3.NewDataTable3Row()  
 
            newCustomersRow("row_date") = dte  
            newCustomersRow("starttime") = str  
 
            Try  
                average = (totalacd / inttotal)  
            Catch ex As Exception  
                average = 0 
            End Try  
            newCustomersRow("average") = average.ToString  
            newCustomersRow("total") = inttotal.ToString  
            dt3.Rows.Add(newCustomersRow)  
            average = 0 
            totalacd = 0 
            inttotal = 0 
 
        Next  
        RadChart1.PlotArea.XAxis.DataLabelsColumn = dt3.starttimeColumn.ToString()  
 
        RadChart1.Series(0).Type = ChartSeriesType.Line  
        RadChart1.Series(1).Type = ChartSeriesType.Bar  
        RadChart1.Series(0).Visible = False    
        RadChart1.PlotArea.DataTable.Visible = True 
 
        RadChart1.ChartTitle.Visible = False 
        RadChart1.Legend.Visible = False 
        RadChart1.DataSource = dt3 
        RadChart1.DataBind()  
        RadChart1.Visible = True 
 
        RadGrid1.DataSource = dt3 
        RadGrid1.DataBind()  
        RadGrid1.Visible = True 
 
        conn.Close()  
 
    End Sub  
End Class 
Jon-Jon Kershaw
Top achievements
Rank 2
 answered on 29 Jan 2009
5 answers
216 views
Hi,

Using a radgrid inside a tab container, the grid only gets loaded when the tab panel is selected, so to display the loading message using AJAXLoadingTemplate I load the datasource with an empty set, then populate with the expected data when the tab is focused.

Everything is working as fine, the only problem is the loading.gif message is being chopped off because there are no rows being shown the first time the data is being loaded into the grid.

Any ideas as to how I could solve this?

Thanks.
Dimo
Telerik team
 answered on 29 Jan 2009
Narrow your results
Selected tags
Tags
+? more
Top users last month
Tien
Top achievements
Rank 1
Iron
Krasimir
Top achievements
Rank 3
Bronze
Iron
Iron
Cedar
Top achievements
Rank 1
Iron
Emil
Top achievements
Rank 1
Iron
Kyle Watson
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Tien
Top achievements
Rank 1
Iron
Krasimir
Top achievements
Rank 3
Bronze
Iron
Iron
Cedar
Top achievements
Rank 1
Iron
Emil
Top achievements
Rank 1
Iron
Kyle Watson
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?