Telerik Forums
UI for ASP.NET AJAX Forum
3 answers
311 views
Hello,

I am working on a project with a RadGrid.
I need to make a custom filter.
I read your documentation and saw the instructions how to do it.

My problem is that the code works only for string type filters.
I get the following error in line 08 when I try to filter other types:

Unable to cast object of type 'Telerik.Web.UI.RadNumericTextBox'
to type 'System.Web.UI.WebControls.TextBox'.

My grid is generic (columns and data fields types are changed dynamically in run-time). 

VB.NET Code:
01.Private Sub RadGrid1_ItemCommand(sender As Object, e As GridCommandEventArgs) Handles RadGrid1.ItemCommand
02.  
03.  
04.        If e.CommandName = RadGrid.FilterCommandName Then
05.            Dim filterPair As Pair = CType(e.CommandArgument, Pair)
06.            Dim filteritem = (CType(e.Item, GridFilteringItem))
07.  
08.            Dim textBox As TextBox = CType(filteritem(filterPair.Second.ToString()).Controls(0), TextBox)
09.            'Dim textBox As CheckBox = CType(x(filterPair.Second.ToString()).Controls(0), CheckBox)
10.            'Dim textBox As RadNumericTextBox = CType(x(filterPair.Second.ToString()).Controls(0), RadNumericTextBox)
11.            'Dim textBox As RadDatePicker = CType(x(filterPair.Second.ToString()).Controls(0), RadDatePicker)
12.  
13.            Dim val As String = textBox.Text
14.            Select Case filterPair.First
15.                Case "EqualTo"
16.  
17.                    'some logic
18.  
19.  
20.                Case ""
21.            End Select
22.  
23.             
24.            e.Canceled = True
25.  
26.  
27.        End If
28.    End Sub


Thank you,
Daniel
Eyup
Telerik team
 answered on 03 Sep 2014
1 answer
234 views
I am using  RadImageEditor & RadGrid with some data with coordinates, When i select a record in the grid i want to draw a rectangle on the image to show the record position on the image and when user selects another record then we should move the rectangle to different position on the image.
 
Vessy
Telerik team
 answered on 03 Sep 2014
2 answers
101 views
Hello,

We have installed Telerik UI for ASP.NET Ajax (Telerik_Web_Parts_For_Sharepoint2010_2014_2_724_Trial.msi) and configured our SharePoint 2010 to use the RadEditor in List items as it is described here. We also performed an IISreset. Still a simple text box appears (see attached screen capture) instead of the full ribbon as shown into the demo. Note that the RadEditor WebPart works fine.

Could you please help us in understanding the missing configuration?

Regards,
Roger.

Roger Roch
Top achievements
Rank 1
 answered on 03 Sep 2014
3 answers
135 views
Greetings,

I was struggling earlier to figure out why my loading panel was not showing.  I inherited an application and was trying to Ajaxify it.  One of my Loading Panels would not show up even though it was doing a lengthy post-back.  I discovered that having align="left" on a table tag (I know, not good practice) causes the loading panel to disappear.  Here is a sample...

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Sample.aspx.cs" Inherits="Sample" %>
 
<html>
  <head runat="server">
    <title>Loading Panel Sample</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <div>
        <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
        </telerik:RadScriptManager>
        <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1">
        </telerik:RadAjaxLoadingPanel>
        <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="RadAjaxLoadingPanel1"
                              Width="350">
          <table border="1" width="350">
            <tr>
              <td>
                <h2>
                  Loading Panel Will Show
                </h2>
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                <telerik:RadButton ID="RadButton1" runat="server" Text="Post Me" OnClick="RadButton1_Click">
                </telerik:RadButton>
              </td>
            </tr>
          </table>
        </telerik:RadAjaxPanel>
        <br />
        <br />
        <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel2">
        </telerik:RadAjaxLoadingPanel>
        <telerik:RadAjaxPanel ID="RadAjaxPanel2" runat="server" LoadingPanelID="RadAjaxLoadingPanel2"
                              Width="350">
          <table align="left" border="1" width="350">
            <tr>
              <td>
                <h2>
                  Loading Panel Will Not Show
                </h2>
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                filler...
              </td>
            </tr>
            <tr>
              <td>
                <telerik:RadButton ID="RadButton2" runat="server" Text="Post Me" OnClick="RadButton2_Click">
                </telerik:RadButton>
              </td>
            </tr>
          </table>
        </telerik:RadAjaxPanel>
      </div>
    </form>
  </body>
</html>

using System;
public partial class Sample : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }
 
  protected void RadButton1_Click(object sender, EventArgs e)
  {
    System.Threading.Thread.Sleep(1000);
  }
 
  protected void RadButton2_Click(object sender, EventArgs e)
  {
    System.Threading.Thread.Sleep(1000);
  }
}

I removed the left alignment from the table tags and now working great.  Just wanted to share in case somebody else has this issue.

Matt
Pavlina
Telerik team
 answered on 03 Sep 2014
1 answer
216 views
I have a Radgrid with 4 ItemTemplate columns each item template column has a Textbox. I need to fire SelectedCellChanged event when I move (click tab) from one cell (textbox) to other cell (I need to call a method which does calculations whenever a cell is changed). How do i do that?

Thanks in advance.

Note: I'm working on a web application using c#.

Regards,
Mohan.
Viktor Tachev
Telerik team
 answered on 03 Sep 2014
8 answers
384 views
I'm struggling with borders on my Grid export to pdf. I have a grid that contains 3 detail tables. My biggest problem is that the 2nd and 3rd detail grids are not exporting with borders. The first detail grid exports with a border. I've tried changing all settings, and tried applying the borders in the code-behind to no avail. I'm also unable to remove borders. I tried setting the BorderType to "NoBorders", but the output still contains borders. Is there an issue with multiple detail tables? I've attached a sample export.

​Here's my grid definition:
<telerik:RadGrid ID="CDMGrid" runat="server"
                AllowPaging="True"
                AllowSorting="true"
                PageSize="25"
                AutoGenerateColumns="false" Skin="Office2007"
                OnNeedDataSource="CDMGrid_NeedDataSource"
                OnItemDataBound="CDMGrid_ItemDataBound"
                OnPreRender="CDMGrid_PreRender"
                OnDetailTableDataBind="CDMGrid_DetailTableDataBind"
                Height="657">
                <ExportSettings IgnorePaging="false" OpenInNewWindow="true">
                    <Pdf PageHeight="210mm" PageWidth="297mm" DefaultFontFamily="Arial Unicode MS" PageTopMargin="25mm" BorderStyle="Thin" BorderColor="#666666" BorderType="AllBorders" />
                </ExportSettings>
                <PagerStyle Mode="NextPrevAndNumeric" AlwaysVisible="True" />
                <MasterTableView TableLayout="Fixed" DataKeyNames="ServiceCode, HospRegn, TechnicalDesc" Name="MasterTableView">
                    <Columns>
                        <telerik:GridBoundColumn UniqueName="HospRegn" DataField="HospRegn" HeaderText="Region" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="60" />
                        <telerik:GridBoundColumn UniqueName="ServiceCode" DataField="ServiceCode" HeaderText="Svc Code" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="80" />
                        <telerik:GridBoundColumn UniqueName="GeneralDesc" DataField="GeneralDesc" HeaderText="General Description" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Left" ItemStyle-Font-Size="11px"  />
                        <telerik:GridBoundColumn UniqueName="TechnicalDesc" DataField="TechnicalDesc" HeaderText="Technical Description" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Left" Visible="false" />
                        <telerik:GridNumericColumn NumericType="Currency" UniqueName="Price1" DataField="Price1" HeaderText="Current Price" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="85" />
                        <telerik:GridBoundColumn UniqueName="SvcTypeDesc" DataField="SvcTypeDesc" HeaderText="Svc Type" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="100" />
                        <telerik:GridBoundColumn UniqueName="InsCdStr" DataField="InsCdStr" HeaderText="Ins Cd" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="140" />
                        <telerik:GridBoundColumn UniqueName="GLKeyStr" DataField="GLKeyStr" HeaderText="GL Key" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                        <telerik:GridDateTimeColumn UniqueName="InactiveDate" DataField="InactiveDate" HeaderText="Inactive Date" HeaderStyle-HorizontalAlign="Center" DataFormatString="{0:d}" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="95" />
                    </Columns>
                    <DetailTables>
                        <telerik:GridTableView AllowPaging="false" AutoGenerateColumns="false" DataKeyNames="" Name="PriceDetail" Width="100%" Font-Size="11px">
                            <Columns>
                                <telerik:GridBoundColumn UniqueName="FormulaCode" DataField="FormulaCode" HeaderText="Formula Code" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="Price1" DataField="Price1" HeaderText="Price 1" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="Price2" DataField="Price2" HeaderText="Price 2" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="Price3" DataField="Price3" HeaderText="Price 3" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="Price4" DataField="Price4" HeaderText="Price 4" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridBoundColumn DataFormatString="0.00" UniqueName="UnitAmt1" DataField="UnitAmt1" HeaderText="Unit Amt 1" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridBoundColumn DataFormatString="0.00" UniqueName="UnitAmt2" DataField="UnitAmt2" HeaderText="Unit Amt 2" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="MinPrice" DataField="MinPrice" HeaderText="Min Price" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridNumericColumn NumericType="Currency" UniqueName="MaxPrice" DataField="MaxPrice" HeaderText="Max Price" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridDateTimeColumn UniqueName="EffectiveDate" DataField="EffectiveDate" HeaderText="Effective Date" HeaderStyle-HorizontalAlign="Center" DataFormatString="{0:d}" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="94" />
                            </Columns>
                        </telerik:GridTableView>
                        <telerik:GridTableView AllowPaging="false" AutoGenerateColumns="false" DataKeyNames="" Name="ProcedureDetail" Width="100%" Font-Size="11px">
                            <Columns>
                                <telerik:GridTemplateColumn UniqueName="Filler" />
                                <telerik:GridBoundColumn UniqueName="SegTypeInd" DataField="SegTypeInd" HeaderText="Seg Type" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="100" />
                                <telerik:GridBoundColumn UniqueName="ThirdPartyIndStr" DataField="ThirdPartyIndStr" HeaderText="Third Party Ind" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="140" />
                                <telerik:GridBoundColumn UniqueName="Code" DataField="Code" HeaderText="Code" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="70" />
                                <telerik:GridDateTimeColumn UniqueName="EffectiveDate" DataField="EffectiveDate" HeaderText="Effective Date" HeaderStyle-HorizontalAlign="Center" DataFormatString="{0:d}" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="94" />
                            </Columns>
                        </telerik:GridTableView>
                        <telerik:GridTableView AllowPaging="false" AutoGenerateColumns="false" DataKeyNames="" Name="CostCenterDetail" Width="100%" Font-Size="11px" BackColor="#fafdc9">
                            <Columns>
                                <telerik:GridTemplateColumn HeaderText="Technical Description" UniqueName="TechnicalDesc" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Right" ItemStyle-BackColor="#fafdc9" HeaderStyle-Width="250" >
                                    <ItemTemplate>
                                        <div style="padding-right: 16px;">
                                            <asp:Label ID="TechnicalDescLabel" runat="server" Text='<%# Eval("TechnicalDesc")%>' />
                                        </div>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn HeaderText="Allowable Cost Centers" UniqueName="AllowableCostCenters" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Right" ItemStyle-BackColor="#fafdc9">
                                    <ItemTemplate>
                                        <div style="padding-right: 16px;">
                                            <asp:Label ID="AllowableCostCentersLabel" runat="server" Text='<%# Eval("CostCenters")%>' />
                                        </div>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                            </Columns>
                        </telerik:GridTableView>
                    </DetailTables>
                    <PagerStyle AlwaysVisible="True" />
                </MasterTableView>
                <ClientSettings>
                    <Scrolling UseStaticHeaders="true" AllowScroll="true" SaveScrollPosition="True" ScrollHeight="100" />
                    <Selecting AllowRowSelect="False" />
                </ClientSettings>
            </telerik:RadGrid>




Daniel
Telerik team
 answered on 03 Sep 2014
3 answers
373 views
Hi,

I had Radcombobox inside RadWindow. I set z-index of radcombox to be really hight value so that it can appear on top of radwindow when maximize the Radwindow.

 
<telerik:RadComboBox ID="cboLocation" EmptyMessage="Location ID or Name" Width="250px"  CheckBoxes="true" Skin="Default" EnableLoadOnDemand="True" ShowMoreResultsBox="true"  ForeColor="Black" EnableVirtualScrolling="true" Font-Size="12px" OnClientItemChecked="OnClientItemCheckedLoc" OnClientDropDownClosed="OnClientDropDownClosedLoc" AutoPostBack="false" runat="server" OnItemsRequested="cboLocation_ItemsRequested" EnableCheckAllItemsCheckBox="true"  OnClientBlur="IsCheckAllSelectedLoc" ShowToggleImage="false"  ZIndex="1000000" >
</telerik:RadComboBox>


The problem I am facing now is I can't see Show more result when I maximized the Radwindow. Please see attached image for example. If I don't maximized the radwindow Dropdown top bar will hide under browser bookmark bar. I tried to put ItemsPerRequest , but it is still now working. Can anyone help me? 

Thank you. 

Best regards,
Ei
Magdalena
Telerik team
 answered on 03 Sep 2014
3 answers
141 views
I try to display RadTreeList inside RadGrid, but unfortunaltely i have a problem when expand and colapse node in RadTreeList.

My problem is occured with this step :

- Expand Item RadGrid
- Expand First Item TreeList
- Try Colapse First Item TreeList. (not work)

With this post, I have send  a projet, That reproduce the problem :

-  TestWithoutRadGrid.aspx (work)
-  TestWithRadGrid.aspx (not work)

If anyone can help me I'll be very grateful.

Thanks in advance
Viktor Tachev
Telerik team
 answered on 03 Sep 2014
3 answers
220 views
I have a RadTreeView where the nesting is not happening how I'd like.  I think it is confusing values from the ParentDataKey and DataKey.  I am loading data from two tables - ApplicationParent and Application.  The Application table has a ParentId column that is a foreign key to ApplicationParent.

There is one record that I'm having trouble with.  See the attached screenshot "treelist data.jpg".  There is an app with a ParentID of 100.  There also exists an Application with an AppId of 100 and an ApplicationParent record with a ParentId of 100.  In the UI, the nesting occurs as shown in the attached screenshots "treelist ui 1.jpg" and "treelist ui 2.jpg".  What I want is for the application "UBH PIF Tracking" to be nested underneath the parent app of the same name.

Here is my code for the TreeList markup and for loading the data:

<telerik:RadTreeList ID="lstApplications" runat="server" AllowSorting="True"
                    ParentDataKeyNames="ParentID" DataKeyNames="AppID"
                    OnNeedDataSource="lstApplications_NeedDataSource"                                         
                    AutoGenerateColumns="False" AllowPaging="True"
                    PageSize="15" TabIndex="3" >
                    <clientsettings>                                               
                        <Selecting AllowItemSelection="True" />
                        <ClientEvents OnItemClick="OnItemClick" OnItemDblClick="OnItemDblClick" />                       
                        <selecting allowitemselection="True" />
                    </clientsettings>
                    <Columns>
                        <telerik:TreeListBoundColumn DataField="AppID" HeaderText="AppID"
                            UniqueName="AppID" Visible="false" ReadOnly="True" />
                        <telerik:TreeListBoundColumn DataField="Name" HeaderText="Application"
                            ItemStyle-Width="20%" UniqueName="Name" ReadOnly="True">
                            <HeaderStyle Width="20%" />
                            <ItemStyle Width="20%" />
                        </telerik:TreeListBoundColumn>
                        <telerik:TreeListBoundColumn DataField="Description" HeaderText="Description"
                            UniqueName="Description" ReadOnly="True" />                           
                    </Columns>
                </telerik:RadTreeList>


public class MyData
    {
        public static List<MyItem> GetData(String prefixText)
        {
            var mergedList = GetParentData(prefixText).Union(GetChildData(prefixText)).ToList();
            return mergedList;
 
            //return GetChildData(prefixText);
        }
 
        public static List<MyItem> GetParentData(String prefixText)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DataAccess.Properties.Settings.SecureConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand("SelApplicationsParent", cn);
            cmd.CommandType = CommandType.StoredProcedure;
 
            if (!prefixText.Equals(String.Empty))
            {
                cmd.Parameters.AddWithValue("nrows", 30);                   //Set results limit to prevent typing lag.
                cmd.Parameters.AddWithValue("term", ("%" + prefixText + "%"));    //Set filter by name
            }
 
            List<MyItem> list = new List<MyItem>();
            cn.Open();
 
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    string AppID = dr["ParentID"].ToString();
                    string ParentID = ""; //dr["ParentID"].ToString();
                    string Name = dr["Name"].ToString();
                    string Description = dr["Description"].ToString();
 
                    list.Add(new MyItem(AppID, Name, Description, ParentID));
                }
            }
 
            dr.Close();
 
            return list;
        }
 
        public static List<MyItem> GetChildData(String prefixText)
        {
            SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DataAccess.Properties.Settings.SecureConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand("SelApplicationsChild", cn);
            cmd.CommandType = CommandType.StoredProcedure;
 
            if (!prefixText.Equals(String.Empty))
            {
                cmd.Parameters.AddWithValue("NRows", 30); //Set results limit to prevent typing lag.
                cmd.Parameters.AddWithValue("Parent", ("%" + prefixText + "%"));
            }
 
            List<MyItem> list = new List<MyItem>();
            cn.Open();
 
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    string AppID = dr["AppID"].ToString();
                    string ParentID = dr["ParentID"].ToString();
                    string Name = dr["Name"].ToString();
                    string Description = dr["Description"].ToString();
 
                    list.Add(new MyItem(AppID, Name, Description, ParentID));
                }
            }
 
            dr.Close();
 
            return list;
        }
    }
 
    public class MyItem
    {
        public string AppID { get; set; }
        public string ParentID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
 
        public MyItem(string appID, string name, string description, string parentID)
        {
            AppID = appID;
            ParentID = parentID;
            Name = name;
            Description = description;
        }
    }
 
 protected void lstApplications_NeedDataSource(object sender, TreeListNeedDataSourceEventArgs e)
    {
        lstApplications.DataSource = MyData.GetData(txtFilter.Text);
    }


How do you suggest I solve this problem?  Right now my only idea is to modify the DB to ensure that there are no ApplicationParents that have a ParentId that is equal to an Application.AppId.
Viktor Tachev
Telerik team
 answered on 03 Sep 2014
7 answers
229 views
hello experts...i am in a problem if any one can come up with some advise...

i am using TabStrip with two Tabs. Tab loads on demand and Each tab has a control on which i have Gridview.  when i press the tab it shows me gridview correctly however, when i press the edit button (or any other button) on the gridview then the gridview disappears. Surely this is because of postback. i am using gridview_needSource event but it does not fire not even a single time.

when i use the tab on the aspx page then on Edit button of gridview the gridview_needSource event fires where i fetch the datasource from the Viewstate back to the grid view and gridivew loads again.

how can i control disappearing of the gridview on the control?

 
Nencho
Telerik team
 answered on 03 Sep 2014
Narrow your results
Selected tags
Tags
+? more
Top users last month
Jake
Top achievements
Rank 1
RBarnes
Top achievements
Rank 1
Iron
Iron
Rami
Top achievements
Rank 1
Iron
Veteran
Nathan
Top achievements
Rank 1
Kumeri
Top achievements
Rank 1
Iron
Veteran
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Jake
Top achievements
Rank 1
RBarnes
Top achievements
Rank 1
Iron
Iron
Rami
Top achievements
Rank 1
Iron
Veteran
Nathan
Top achievements
Rank 1
Kumeri
Top achievements
Rank 1
Iron
Veteran
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?