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

Please tell me what I'm doing wrong. I'm using the SearchPattern of an ImageManager, to limit the extensions to a folder.
I use the * character for easily recognizing extensions (*.jp*). This works for showing the files, but when I try to upload a file with extension .jpg, I get a message saying "The extension of the upload file is not valid. Please, provide a valid file!"

Here is my code:
RadEditor1.ImageManager.ViewPaths = new string[] { "~/Upload/Images" };  
RadEditor1.ImageManager.UploadPaths = new string[] { "~/Upload/Images" };  
RadEditor1.ImageManager.DeletePaths = new string[] { "~/Upload/Images" };  
RadEditor1.ImageManager.SearchPatterns = new string[] { "*.jp*""*.gif""*.png""*.bmp" }; 

Any ideas?
Rumen
Telerik team
 answered on 29 Jul 2009
1 answer
80 views
Ok, this is really odd behavior. I'm running windows Vista with IE7 and the 2009.1 402 version of the RadControls.
 
I've got a page with a radsplitter with two panes; a left and a right. A rad treeview sits in the left pane which contains a bunch of links to local pages and when you left click on a treeview node the content loads in the right pane. I've set all of the RadTreeNodeBinding targets to the right pane's client id as seen below in the Page.Onload event. However we just noticed that if you right click a treeview node and select "Open in a new window" and then go to the new window that was opened and then navigate back to the main page that has the splitter/treeview then any node you click on will load the url in the entire window rather than just in the right pane. I've winmerged the source html between pages that exhibit the expected behavior and pages that show this un-expected behavior and there is no difference. My only conclusion is there is some sort of dynamic javascript used by the radtreeview and the splitter that has a defect.

 

foreach (RadTreeNodeBinding binding in TreeView2.DataBindings)

 

{

binding.Target = ContentPane.ClientID;

}

  1. Create and run a test project based on the info provided and left click on some links to confirm that the links open in the right pane.
  2. Right click a treeview node and select "open in a new window".
  3. Once the new window opens type in the url for the page from step one and navigate to it.
  4. Now left click any treeview node and see how the url no longer opens in the right pane, but rather navigates the entire window to the selected url which is not the expected behavior.

Veselin Vasilev
Telerik team
 answered on 29 Jul 2009
1 answer
123 views
Hi! I have a radgrid which has GridBinaryImage column and server side code to bind the data from the grid. My problem is I still can't display the image correctly in grid even if my image is byte[] type in c# and image type in sql db.

markup:

<

 

telerik:GridBinaryImageColumn DataField="PictureImg" HeaderText="Image" UniqueName="PictureImg"

 

 

ImageAlign="Middle" ImageHeight="200px" ImageWidth="200px" ResizeMode="Fit">

 

 

<HeaderStyle Width="10%" />

 


codebehind:

 

protected class PictureTemplate

 

{

 

public Guid PictureID { get; set; }

 

 

public string PictureName { get; set; }

 

 

public byte[] PictureImg { get; set; }

 

 

public string PictureDesc { get; set; }

 

}


 

protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)

 

{

 

List<PictureTemplate> picTemplate;

 

 

using (DianaOnlinePhotoEntities db = new DianaOnlinePhotoEntities())

 

{

picTemplate = (

from p in db.tblPicture

 

 

where p.PictureID != null

 

 

select new PictureTemplate

 

{

PictureID = p.PictureID,

PictureName = p.PictureName,

PictureImg = p.PictureImg,

PictureDesc = p.PictureDesc

}).ToList();

RadGrid1.DataSource = picTemplate;

}

}


Thanks!!
Vlad
Telerik team
 answered on 29 Jul 2009
2 answers
87 views
Hello Everybody

I'm using NeedDataSource event to populate grid with data. That's what grid tag looks like:

<telerik:RadGrid runat="server" ID="gridUsers" AutoGenerateColumns="false"  
        AllowPaging="true" AllowCustomPaging="true" 
        onneeddatasource="gridUsers_NeedDataSource" ShowStatusBar="true"  
        PageSize="25" onpageindexchanged="gridUsers_PageIndexChanged"  
        ondatabound="gridUsers_DataBound"
        <MasterTableView AllowFilteringByColumn="true"
            <PagerStyle Mode="Slider" /> 
            <Columns> 
                <telerik:GridTemplateColumn CurrentFilterFunction="StartsWith" ShowFilterIcon="false" AutoPostBackOnFilter="true" HeaderText="Username" SortExpression="Username"
                    <ItemTemplate> 
                        <href="<%#UrlHelpers.GetUserProfileUrl(Eval("UserID")) %>"
                            <%#Eval("Username") %> 
                        </a> 
                    </ItemTemplate> 
                </telerik:GridTemplateColumn> 
                <telerik:GridBoundColumn AllowFiltering="false" HeaderText="First name" DataField="FirstName"
                </telerik:GridBoundColumn> 
                <telerik:GridBoundColumn AllowFiltering="false" HeaderText="Last name" DataField="LastName"
                </telerik:GridBoundColumn> 
            </Columns>     
        </MasterTableView> 
    </telerik:RadGrid>  

That's a NeedDataSource event handler which I use:

protected void gridUsers_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) 
    { 
        using (DataClassesDataContext db = new DataClassesDataContext())  
        { 
            var query = from c in db.Users  
                        select  
                        new  
                        { 
                            c.FirstName,   
                            c.LastName, 
                            c.Username, 
                            c.UserID 
                        }; 
            gridUsers.MasterTableView.VirtualItemCount = query.Count(); 
            gridUsers.DataSource = query.Skip(gridUsers.CurrentPageIndex*gridUsers.PageSize).Take(gridUsers.PageSize).ToList(); 
        } 
    } 
 
I feel confused, because nearly all live demos that illustrate filtering stuff use SqlDataSource for data binding, not NeedDataSource handling. Every time I try to filter the grid by username I get an error which says "Expression expected". Could anybody give me a tip that would help me to solve the issue without changing the way data binding is done?

Thanks in advance!  
vo_one
Top achievements
Rank 1
 answered on 29 Jul 2009
1 answer
108 views
Hi
     I Used RadGrid. Herewith i have load 1000 Records. Each Page Index Shows 25 Records. it is Working Properly. When i saw the View Source the Record Showing only 25 Records(view Html Source) it is good. But The Same way i used to Another Grid But the View Source Shows the 1000 Records in Html View. In order that the Gird page is Loding Slowely. I don't know.. Why One Grid View Source is displaying Corretly.. and Another one is Wrong... Let me know how can i solved this problem...Herewith i have give my sample Coding here.


This Grid Html View is Showing Properly...

HTML
 <JetSoft:RadGrid ID="griduniversal" TabIndex="1190"   AllowPaging="True"
                            OnNeedDataSource="griduniversal_NeedDataSource" OnPageIndexChanged="griduniversal_PageIndexChanged" Width="100%" OnEditCommand="griduniversal_EditCommand"  AlternatingItemStyle-BackColor="ActiveBorder"                             
                            OnPreRender="griduniversal_PreRender"  AutoGenerateColumns="False"  
                            runat="server"  GridLines="None" AllowSorting="True">
                           
                                    <HeaderContextMenu EnableTheming="True">
                                    <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                                    </HeaderContextMenu>
                                    
                                     <ClientSettings>
                                        <Selecting AllowRowSelect="true" />
                                    </ClientSettings>
                                     <MasterTableView  CommandItemDisplay="Top"  DataKeyNames="id,ContactTypeID">                                     
                                    
                                    
                                    <CommandItemTemplate>
                                     <div class="deletelnk">
                                        <asp:LinkButton ID="lnkContactDelete"  OnClick="lnkContactDelete_OnClick" OnClientClick="javascript:return confirm('Would you like to delete the selected Contact(s)?')" runat="server" CausesValidation="false"><img style="border:0px;vertical-align:middle;" alt="" src="../../Images/Delete.png" /><asp:Literal ID="litDeleteArea" runat="server" Text="<%$ Resources:AdminResource, lnkDeleteContact%>"></asp:Literal></asp:LinkButton>
                                     </div>  
                                 </CommandItemTemplate>      
                                                                        
                             <Columns>
                                    
                                    <JetSoft:GridTemplateColumn UniqueName="TemplateColumn">
                                    <ItemTemplate>                    
                                            <asp:CheckBox id="chkContactDelete" runat="server"></asp:CheckBox>                  
                                    </ItemTemplate>
                                    <HeaderStyle Width="10px"></HeaderStyle>                                
                                    </JetSoft:GridTemplateColumn>        
                                
                                      <JetSoft:GridEditCommandColumn UniqueName="EditCommandColumn">
                                      <HeaderStyle Width="40px"></HeaderStyle>
                                       </JetSoft:GridEditCommandColumn>                                            
                                       
                                        <JetSoft:GridBoundColumn UniqueName="ID" Visible="false" HeaderText="ID" DataField="ID">
                                        <HeaderStyle Width="20px"></HeaderStyle>
                                        </JetSoft:GridBoundColumn>           
                                      
                                      <JetSoft:GridBoundColumn UniqueName="FirstName"  HeaderText="Name" DataField="FullName">
                                        <HeaderStyle Width="300px"></HeaderStyle>
                                      </JetSoft:GridBoundColumn>
                                      
                                      <JetSoft:GridBoundColumn UniqueName="City"  HeaderText="City" DataField='CityName'>
                                        <HeaderStyle Width="200px"></HeaderStyle>
                                      </JetSoft:GridBoundColumn>
                                      
                                      <JetSoft:GridBoundColumn UniqueName="State" HeaderText="State" DataField="StateName">
                                        <HeaderStyle Width="100px" />
                                      </JetSoft:GridBoundColumn>
                                      
                                      <JetSoft:GridBoundColumn UniqueName="Description" HeaderText="Contact Type" DataField="ContactDescription">
                                      </JetSoft:GridBoundColumn>                                                                          
                                          
                                 </Columns>
                         
                                        <EditFormSettings EditFormType="WebUserControl">
                                        <EditColumn>
                                        </EditColumn>
                                        </EditFormSettings>
                                       
                                        <RowIndicatorColumn>
                                        <HeaderStyle Width="20px"></HeaderStyle>
                                        </RowIndicatorColumn>

                                        <ExpandCollapseColumn>
                                        <HeaderStyle Width="20px"></HeaderStyle>
                                        </ExpandCollapseColumn>
                                        </MasterTableView>

                                        <FilterMenu EnableTheming="True">
                                        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                                        </FilterMenu>
                                        
                                </JetSoft:RadGrid>

Code Behind Part
 /// <summary>
        /// Handling PreRender Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///
        protected void griduniversal_PreRender(object sender, System.EventArgs e)
        {
            if (!this.IsPostBack)
            {

                if (JSSessionHandler.GetSessionValue("ImageUploadID") != null)
                {
                    if (JSSessionHandler.GetSessionValue("ImageUploadID").ToString() == "OutSideVendorImageUploaded")
                    {                      
                       // To do Something
                        this.griduniversal.MasterTableView.Rebind();
                      
                    }
                    else if (JSSessionHandler.GetSessionValue("ImageUploadID").ToString() == "OutSideVendorLeadImageUploaded")
                    {
                                               // To do Something
                        this.griduniversal.MasterTableView.Rebind();                       
                    }

                }
                else
                    griduniversal.CurrentPageIndex = Convert.ToInt32(JSSessionHandler.GetSessionValue("gridPageIndex"));
                this.griduniversal.MasterTableView.Rebind();
            }
        }


Need Data Source
        protected void griduniversal_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            
            if (JSSessionHandler.GetSessionValue("sessionSearchcontacts") == null)
            {
                if ((txtUniversalSearchFirstName.Text == string.Empty) && (txtUniversalSearchLastName.Text == string.Empty) && (txtUniversalSearchEmail.Text == string.Empty) && (txtUniversalSearchPostalZipCode.Text == string.Empty))
                {
                    if (Request.QueryString["contactID"] != null && Request.QueryString["contactID"] != "")
                    {
                           // TODO: Something Here
                        List<ContactData> gridData = new List<ContactData>();
                        gridData = contactManager.GetGridContactByID(Convert.ToInt32(Request.QueryString["contactID"]));
                        this.griduniversal.DataSource = gridData;                      
                    }
                    else
                    {

                        List<ContactData> gridData = new List<ContactData>();
                        UserData sessionUser = (UserData)JSSessionHandler.GetSessionValue("UserData");
                        if (sessionUser != null && sessionUser.Id > 0)
                        {
                           // TODO: Something Here
                            gridData = contactManager.GetAllSearchContacts(Convert.ToInt32(sessionUser.Id));
                            this.griduniversal.DataSource = gridData;
                           
                        }
                      

              
The below sample coding  Grid view HTML is wrong.

   <JetSoft:RadGrid ID="gridPropertySearch" AllowPaging="True"
                            OnNeedDataSource="gridPropertySearch_NeedDataSource"  
                        OnEditCommand="gridPropertySearch_EditCommand" Width="100%" OnPageIndexChanged="gridPropertySearch_PageIndexChanged"  AlternatingItemStyle-BackColor="ActiveBorder"                             
                            OnPreRender="gridPropertySearch_PreRender"  AutoGenerateColumns="False"
                            runat="server"  GridLines="None" AllowSorting="True">
                            
                     <HeaderContextMenu EnableTheming="True">
                   <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                    </HeaderContextMenu>
                
                <ClientSettings>
                <Selecting AllowRowSelect="true" />
                </ClientSettings>
                
                        <AlternatingItemStyle BackColor="ActiveBorder" />
                
                <MasterTableView   CommandItemDisplay="Top" DataKeyNames="ID">                                  
                   
                 
                     <CommandItemTemplate>
                     <div class="deletelnk">
                     <asp:LinkButton ID="lnkPropertyDelete" OnClientClick="javascript:return confirm('Would you like to delete the selected Propertie(s)?')" OnClick="lnkPropertyDelete_Click" runat="server" CausesValidation="false"><img style="border:0px;vertical-align:middle;" alt="" src="../../Images/Delete.png" /> <asp:Literal ID="litDeleteArea" runat="server" Text="<%$ Resources:AdminResource, lnkDeleteProperty%>"></asp:Literal></asp:LinkButton>
                     </div>                      
                  </CommandItemTemplate>                
                 
                  <Columns>                                          
                    <JetSoft:GridTemplateColumn UniqueName="TemplateColumn">
                    <ItemTemplate>                    
                       <asp:CheckBox id="chkPropertiesDelete" runat="server"></asp:CheckBox>                                                                                                                
                    </ItemTemplate>
                    <HeaderStyle Width="5px"></HeaderStyle>
                    </JetSoft:GridTemplateColumn>                                       
                                                                                                           
                    <JetSoft:GridEditCommandColumn UniqueName="EditCommandColumn">
                    <HeaderStyle Width="10px"></HeaderStyle>
                    </JetSoft:GridEditCommandColumn>                          
                    
                    <JetSoft:GridBoundColumn Visible="false"  UniqueName="ID" HeaderText="ID" DataField="ID">
                    <HeaderStyle Width="70px"></HeaderStyle>
                    </JetSoft:GridBoundColumn>    
                    <JetSoft:GridBoundColumn UniqueName="Code" HeaderText="Code" DataField="Code">
                    <HeaderStyle Width="25px"></HeaderStyle>
                    </JetSoft:GridBoundColumn>    
                                                                                                                                                                                                    
                    <JetSoft:GridBoundColumn UniqueName="Name" HeaderText="Property Name" DataField="Name">
                    <HeaderStyle Width="70px"></HeaderStyle>
                    </JetSoft:GridBoundColumn>                     
                    
                    <JetSoft:GridBoundColumn UniqueName="DestinationName" HeaderText="Area Name" DataField="DestinationName">
                    <HeaderStyle Width="70px"></HeaderStyle>
                    </JetSoft:GridBoundColumn>                     
                                                                                                                                                                                                                                    
                  </Columns>
                
                  <EditFormSettings EditFormType="WebUserControl">
                  <EditColumn>
                  </EditColumn>
                  </EditFormSettings>
                  
                  <RowIndicatorColumn>
                  <HeaderStyle Width="20px"></HeaderStyle>
                  </RowIndicatorColumn>
 
                  <ExpandCollapseColumn>
                  <HeaderStyle Width="20px"></HeaderStyle>
                  </ExpandCollapseColumn>
                  </MasterTableView>

                  <FilterMenu EnableTheming="True">
                  <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation>
                  </FilterMenu>                                                                                

                            
                    </JetSoft:RadGrid>


/// <summary>
        /// Handling PreRender Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///
        protected void gridPropertySearch_PreRender(object sender, System.EventArgs e)
        {
            if (!this.IsPostBack)
            {

                if (JSSessionHandler.GetSessionValue("EditImageUploadID") != null)
                {
                    int itemvalue;
                    if (Request.QueryString["propertyImagesID"] != "" && Request.QueryString["propertyImagesID"].ToString() != "")
                    {
                        JSSessionHandler.SetSessionValue("PropertyBedLayout", "1");
                        itemvalue = Convert.ToInt32(Request.QueryString["propertyImagesID"]);
                    }
                    else
                    {
                        JSSessionHandler.SetSessionValue("PropertyBedLayout", "1");
                        itemvalue = Convert.ToInt32(JSSessionHandler.GetSessionValue("propertyImagesID").ToString());
                    }
                    gridPropertySearch.MasterTableView.EditFormSettings.UserControlName = "~/Admin/UserControl/PropertySearchEx.ascx";
                    this.gridPropertySearch.MasterTableView.Items[itemvalue].Edit = true;
                    this.gridPropertySearch.MasterTableView.Rebind();
                    JSSessionHandler.SetSessionValue("PropertyId", JSSessionHandler.GetSessionValue("PropertyId"));
                }
                else                
                    this.gridPropertySearch.MasterTableView.Rebind();
                
                 
            }
        }


 /// <summary>
        /// Loads the data source
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        protected void gridPropertySearch_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {

            if (JSSessionHandler.GetSessionValue("GetInsertedPropertyId") != null)
            //if (Request.QueryString["propertyID"] != null && Request.QueryString["propertyID"] != "")
            {
                IList<PropertyData> gridPropertyData = new List<PropertyData>();
                gridPropertyData = propertyManager.GetInsertedPropertybyId(Convert.ToInt64(JSSessionHandler.GetSessionValue("GetInsertedPropertyId")));
                this.gridPropertySearch.DataSource = gridPropertyData;
                // JSSessionHandler.RemoveSessionKey("GetInsertedPropertyId");

            }

            else if (JSSessionHandler.GetSessionValue("GetUpdatedPropertyId") != null)
            //(Request.QueryString["UpdatepropertyID"] != null && Request.QueryString["UpdatepropertyID"] != "")
            {

                IList<PropertyData> gridPropertyData = new List<PropertyData>();
                gridPropertyData = propertyManager.GetInsertedPropertybyId(Convert.ToInt64(JSSessionHandler.GetSessionValue("GetUpdatedPropertyId")));
                this.gridPropertySearch.DataSource = gridPropertyData;
                //JSSessionHandler.RemoveSessionKey("GetUpdatedPropertyId");
               

            }
            else
            {

                if ((txtSearchPropertyName.Text == string.Empty) && (txtSearchPropertyOwner.Text == string.Empty))
                {                 


                    IList<PropertyData> gridPropertyData = new List<PropertyData>();
                    // gridPropertyData = propertyManager.GetAllSearchProperties();
                    IList<ContactData> gridData = new List<ContactData>();
                    UserData sessionUser = (UserData)JSSessionHandler.GetSessionValue("UserData");
                    //gridPropertyData = propertyManager.GetAllUserWiseSearchProperties(Convert.ToInt32(sessionUser.Id));

                    if (sessionUser != null && sessionUser.Id > 0)
                    {
                        DateTime sDate = DateTime.Now;
                        gridPropertyData = propertyManager.GetAllUserWiseSearchPropertiesEx(Convert.ToInt32(sessionUser.Id));
                        DateTime edate1 = DateTime.Now;
                        TimeSpan ts8 = sDate - edate1;

                        this.gridPropertySearch.DataSource = gridPropertyData;
                    }
                    else
                    {
                        Server.Transfer("~/Default.aspx");
                    }

                }
           
            }

Let me  know How can i solved this problem.... Please Do need ful ASAP





           








Vlad
Telerik team
 answered on 29 Jul 2009
8 answers
245 views
I just upgraded Chrome to the latest beta 2.0.169.1 and the toolbar buttons disappeared.  Works fine in all other browsers including the old Google Chrome 1.0.

Anybody with the same issue?
Paul
Telerik team
 answered on 29 Jul 2009
1 answer
117 views
Hello,

When a node is deleted through client side javascript code, the tri-state check box functionality is not working as expected. 
Check state of the ancestors of the deleted node are not updated. 

Only parent of the deleted node's checkstate gets updated.  Grand Parent of the deleted node's check state is not updated. 

please find below code for deleting a node.

function DeleteNode(nodeID) { 
        var tree = $find("<%=  RadTreeView1.ClientID%>"); 
        var node = tree.findNodeByValue(nodeID); 
        tree.trackChanges(); 
        node.get_parent().get_nodes().remove(node); 
        tree.commitChanges(); 
    } 


But when a new node is added to the tree, corresponding ancestors check state is updated as expected. Adding a new node to the tree is not a problem.

Please find below code for adding new node.
function AddNewNode(newNodeID, title, direction, siblingNodeid, parentid) { 
        var tree = $find("<%=  RadTreeView1.ClientID%>"); 
        var pnode = tree.findNodeByValue(parentid); 
        var snode = tree.findNodeByValue(siblingNodeid); 
        var index = snode.get_index(); 
         
        tree.trackChanges(); 
        var newnewnode = new Telerik.Web.UI.RadTreeNode(); 
        if (direction == "below") { 
            pnode.get_nodes().insert(index + 1, newnode); 
        } else { 
            pnode.get_nodes().insert(index, newnode); 
        } 
        newnode.set_value(newNodeID); 
        newnode.set_imageUrl("../images/GreenDot.gif"); 
        newnode.set_cssClass("tree-node"); 
        var attributes = newnode.get_attributes(); 
        attributes.setAttribute("NodeName", title); 
        attributes.setAttribute("ParentID", parentid); 
 
        var html = ""
        var x = 0
        html += "&nbsp;<img src='../images/Q.gif' align='bottom' border='0'/>"; 
        x |= 1; 
 
        newnode.get_attributes().setAttribute("Properties", x); 
        newnode.get_textElement().innerHTML = title + html; 
 
        tree.commitChanges(); 
    } 



Please help me with this problem.


Thanks in advance,
ravi



Dimitar Milushev
Telerik team
 answered on 29 Jul 2009
1 answer
70 views
Hi,
I have a very serious proplem related to my pages use RadAjaxManager v2008.2.723.35
I noticed that the page without RadAjaxManager that costs arround 200 KB jumps to 1.2 MB using RadAjaxManager

this realy effects the overall performance of my web application and dangerously decrease the time needed to load each page

I will appreciate your help,
Ihab
Pavlina
Telerik team
 answered on 29 Jul 2009
1 answer
195 views
Hello,

I am using telerik:RadGrid for insert, update, delete records in one of my project. My problem is instead of delete button or delete image i want check box in each row and a delete button in header of the grid, in which i can checked one or more checkbox and by click on the delete button it deleted the checked rows from the grid.

Can any one help me in this.....
Princy
Top achievements
Rank 2
 answered on 29 Jul 2009
3 answers
645 views

Hello,

 

I am using a RadTreeView control that uses an “OnClientDoubleClick” event that changes based on the state of the page.  The functions tied to this event are working correctly.  My issue is that on every double click, if the node has children, the node is expanded/collapsed based on its state.  Is there a way to disable the “expand/collapse on client double click” functionality?

 

Thanks

Andy
Top achievements
Rank 1
 answered on 29 Jul 2009
Narrow your results
Selected tags
Tags
+? more
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?