Telerik Forums
UI for ASP.NET AJAX Forum
9 answers
394 views
Hello All

I have a problem with a RadGrid where the paging section is not refreshing. If, for example, the first search returns 15 records and the second search only 5 records, I see '... page 1 of 2...' in the second search which is incorrect info caused by the paging section of the grid not refreshing. My page count is set to 10 records. That means there should be only one page in the second search.

Please help as soon as possible.
Thank you!

Colin
Top achievements
Rank 1
 answered on 16 Jul 2014
8 answers
165 views
Hi All,

Is there any possible way to set dataformatstring of a Calculated Item? I am customising the calculation behind the C# code and would like to format it into {0:p0}.

Right now, e.CalculatedValue is a double without any format.

Many thanks.
Tim
Top achievements
Rank 1
 answered on 16 Jul 2014
3 answers
225 views
Hey
Guys/gals,



We have developed some functionality for Gatorade and have deployed it on the
test server, the functionality seems to be working fine on all browsers except
Internet Explorer 8 and 9. Please could you guys have a look and let us know
your thoughts.



At first we I thought it is a css display issue thing , but later when i looked
at the html code in firebug realized that the radtabstrip is not working, the
code is not being injected on to the page. You can have a look at the same page
in chrome and see the difference.



Test URL: http://gatoradecmsupg.teectest.co.uk/shopifyproducts



Looking forward to your reply.



Regards.

Harish
Dimitar Terziev
Telerik team
 answered on 16 Jul 2014
1 answer
156 views
Hope someone has the patients to spell out for me the actual changes needed in the DBSchedulerProviderBase(inherited from SchedulerProviderBase) class to work with my Entities Provider.  I cant seem to find any examples of what needs to change in this base class to get my Entities associated with my custom RadLabDBSchedulerProvider class.

Here is what i have so far in this Base Class - I have added the obvious DBFactory and ConnectionString, :

public abstract class DbSchedulerProviderBase : SchedulerProviderBase
    {
        protected DbProviderFactory DbFactory { get { return DbProviderFactories.GetFactory("System.Data.EntityClient");} set { }}
        protected bool PersistChanges { get { }; set { }; }
        protected string ConnectionString { get { return ConfigurationManager.ConnectionStrings["RadLabDBEntities"].ConnectionString;} set { }; }
        public override void Initialize(string name, NameValueCollection config) { };
        protected virtual DbConnection OpenConnection() { };
        protected virtual DbParameter CreateParameter(string name, object value) { };
    }


So what needs to go in PersitChanges, Initialize(), DbConnection, etc??...   I have my inherited class for the provider all ready, just i don't understand all these function in the base class, and what needs be changed.  Can you point me to examples?  Ok with giving me links to other resources, but if you could spell out an examples (cant seem to find any examples of this in your codebase or docs).  

Here is my web.config info:
<configSections>
   <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
 <connectionStrings>
   <add name="TelerikConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Telerik.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />
   <add name="TelerikVSXConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\TelerikVSX.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />
   <add name="Telerik" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Telerik;Integrated Security=True" providerName="System.Data.SqlClient" />
   <add name="RadLabDBEntities" connectionString="metadata=res://BarLab/BarLabModel.csdl|res://BarLab/BarLabModel.ssdl|res://BarLab/BarLabModel.msl;provider=System.Data.SqlClient;provider connection string='data source=IRIONVO\SQLIRIONVO;initial catalog=RadLabDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
 </connectionStrings>
 
<entityFramework>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
   <providers>
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
 </entityFramework>

And if needed, here is my RadLabDbSchedulerProvider.cs code  - This is what i would then assign to radscheduler1.Provider = RadLabDbSchedulerProvider:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data.Common;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using Telerik.Web.UI;
 
 
    public class RadLabDbSchedulerProvider : DbSchedulerProviderBase
    {
 
        public ArrayList resourceKeys = new ArrayList();
 
        public Dictionary<int, Resource> _persons { get; set; }
 
        public Dictionary<int, Resource> _hardware { get; set; }
 
        public override IEnumerable<ResourceType> GetResourceTypes(RadScheduler owner)
        {
            ResourceType[] resourceTypes = new ResourceType[2];
            resourceKeys.Clear();
 
            resourceTypes[0] = new ResourceType("Person", true);
            resourceKeys.Add("Person");
 
            resourceTypes[1] = new ResourceType("BAR_HW", true);
            resourceKeys.Add("BAR_HW");
            return resourceTypes;
        }
 
        public override IEnumerable<Resource> GetResourcesByType(RadScheduler owner, string resourceType)
        {
            switch (resourceType)
            {
                case "Person":
                    return Persons.Values;
 
                case "BAR_HW":
                    return BAR_HWs.Values;
 
                default:
                    throw new InvalidOperationException("Unknown resource type: " + resourceType);
            }
        }
 
        private IDictionary<int, Resource> Persons
        {
            get
            {
                if (_persons == null)
                {
                    _persons = new Dictionary<int, Resource>();
                    foreach (Resource person in LoadPersons())
                    {
                        _persons.Add((int)person.Key, person);
                    }
                }
                return _persons;
            }
        }
 
        private IDictionary<int, Resource> BAR_HWs
        {
            get
            {
                _hardware = new Dictionary<int, Resource>();
                foreach (Resource hardware in LoadHardware())
                {
                    _hardware.Add((int)hardware.Key, hardware);
                }
                return _hardware;
            }
        }
 
        private IEnumerable<Resource> LoadPersons()
        {
            List<Resource> resources = new List<Resource>();
            using (DbConnection conn = OpenConnection())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT [ResourceId], [Name], [Type], [Available], [ParentId], [Level], [Status], [Shared], [LastModifedTime], [Url], [LastModifedUser], [Building], [PersonId], [QuicklookId], [Cube], [Phone], [Email] FROM [Person]";
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Resource res = new Resource();
                        res.Type = "Person";
                        res.Key = reader["ResourceId"];
                        res.Text = Convert.ToString(reader["Name"]);
                        res.Attributes["ParentId"] = Convert.ToString(reader["ParentId"]);
                        res.Attributes["Type"] = Convert.ToString(reader["Type"]);
                        res.Attributes["BomId"] = string.Empty;
                        res.Attributes["Approved"] = string.Empty;
                        resources.Add(res);
                    }
                }
            }
            return resources;
        }
 
        private IEnumerable<Resource> LoadHardware()
        {
            List<Resource> resources = new List<Resource>();
            using (DbConnection conn = OpenConnection())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT [ResourceId], [Name], [Type], [Available], [ParentId], [Level], [Status], [Shared], [LastModifedTime], [Url], [LastModifedUser], [Building], [HWId], [Lab], [Tile], [BomId], [Owner], [RegisteredTime], [LastContactTime], [Station], [Row], [IP], [Cabinet], [RailSlot], [SizeU], [AssetTag], [SrvsTicket] FROM [BAR_HW]";
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Resource res = new Resource();
                        res.Type = "BAR_HW";
                        res.Key = reader["ResourceId"];
                        res.Text = Convert.ToString(reader["Name"]);
                        res.Attributes["ParentId"] = Convert.ToString(reader["ParentId"]);
                        res.Attributes["Type"] = Convert.ToString(reader["Type"]);
                        res.Attributes["BomId"] = Convert.ToString(reader["BomId"]);
                        res.Attributes["Approved"] = string.Empty;
 
                        resources.Add(res);
                    }
                }
            }
            return resources;
        }
 
        private void LoadResources(Appointment apt)
        {
            using (DbConnection conn = OpenConnection())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
 
                cmd.Parameters.Add(CreateParameter("@ScheduleId", apt.ID));
                cmd.CommandText = "SELECT [ResourceId], [ParentId], [BomId], [Type], [Approved] FROM [ScheduleResource] WHERE [ScheduleId] = @ScheduleId";
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        switch (Convert.ToString(reader["Type"]))
                        {
                            case "Person":
                                Resource presource = Persons[Convert.ToInt32(reader["ResourceId"])];
                                presource.Attributes["ParentId"] = Convert.ToString(reader["ParentId"]);
                                presource.Attributes["Type"] = Convert.ToString(reader["Type"]);
                                presource.Attributes["BomId"] = Convert.ToString(reader["BomId"]);
                                presource.Attributes["Approved"] = Convert.ToString(reader["Approved"]);
                                apt.Resources.Add(presource);
                                break;
 
                            case "BAR_HW":
                                Resource resource = BAR_HWs[Convert.ToInt32(reader["ResourceId"])];
                                resource.Attributes["ParentId"] = Convert.ToString(reader["ParentId"]);
                                resource.Attributes["Type"] = Convert.ToString(reader["Type"]);
                                resource.Attributes["BomId"] = Convert.ToString(reader["BomId"]);
                                resource.Attributes["Approved"] = Convert.ToString(reader["Approved"]);
                                apt.Resources.Add(resource);
                                break;
 
                            default:
                                throw new InvalidOperationException("Unknown resource type: " + Convert.ToString(reader["Type"]));
                        }
                    }
                }
            }
        }
 
        public override IEnumerable<Appointment> GetAppointments(RadScheduler owner)
        {
            List<Appointment> appointments = new List<Appointment>();
            using (DbConnection conn = OpenConnection())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT [ScheduleId], [Subject], [Start], [End], [RecurrenceRule], [RecurrenceParentID], [Email], [LastModified], [Description], [ProjectId], [TicketId], [QuicklookId], [Reminder], [AppointmentColor] FROM [Schedules]";
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Appointment apt = new Appointment();
                        apt.Owner = owner;
                        apt.ID = reader["ScheduleId"];
                        apt.Subject = Convert.ToString(reader["Subject"]);
                        apt.Start = DateTime.SpecifyKind(Convert.ToDateTime(reader["Start"]), DateTimeKind.Utc);
                        apt.End = DateTime.SpecifyKind(Convert.ToDateTime(reader["End"]), DateTimeKind.Utc);
                        apt.RecurrenceRule = Convert.ToString(reader["RecurrenceRule"]);
                        apt.RecurrenceParentID = reader["RecurrenceParentId"] == DBNull.Value ? null : reader["RecurrenceParentId"];
                        apt.Description = Convert.ToString(reader["Description"]);
 
                        apt.Attributes["Email"] = reader["Email"].ToString();
                        apt.Attributes["ProjectId"] = reader["ProjectId"].ToString();
                        apt.Attributes["TicketId"] = reader["TicketId"].ToString();
                        apt.Attributes["QuicklookId"] = reader["QuicklookId"].ToString();
                        apt.Attributes["AppointmentColor"] = reader["AppointmentColor"].ToString();
                        apt.Attributes["LastModified"] = DateTime.SpecifyKind(Convert.ToDateTime(reader["LastModified"]), DateTimeKind.Utc).ToShortDateString();
 
                        if (apt.RecurrenceParentID != null)
                        {
                            apt.RecurrenceState = RecurrenceState.Exception;
                        }
                        else if (apt.RecurrenceRule != string.Empty)
                        {
                            apt.RecurrenceState = RecurrenceState.Master;
                        }
                        LoadResources(apt);
                        appointments.Add(apt);
                    }
                }
            }
            return appointments;
        }
 
        private void FillSchedResources(Appointment appointment, DbCommand cmd, object ScheduleId, string resType)
        {
            foreach (Resource resource in appointment.Resources.GetResourcesByType(resType))
            {
                cmd.Parameters.Clear();
                cmd.Parameters.Add(CreateParameter("@SchedleId", ScheduleId));
                cmd.Parameters.Add(CreateParameter("@ResourceId", resource.Key));
                cmd.Parameters.Add(CreateParameter("@ParentId", resource.Attributes["ParentId"]));
                cmd.Parameters.Add(CreateParameter("@Type", resource.Attributes["Type"]));
                cmd.Parameters.Add(CreateParameter("@BomId", resource.Attributes["BomId"]));
                cmd.Parameters.Add(CreateParameter("@Approved", resource.Attributes["Approved"]));
 
                cmd.CommandText = "INSERT INTO [ScheduleResource] ([ScheduleId], [ResourceId], [ParentId], [Type], [BomId], [Approved]) VALUES (@ScheduleId, @ResourceId, @ParentId, @Type, @BomId, @Approved)";
                cmd.ExecuteNonQuery();
            }
        }
 
        private void ClearSchedResources(object ScheduleId, DbCommand cmd)
        {
            cmd.Parameters.Clear();
            cmd.Parameters.Add(CreateParameter("@ScheduleId", ScheduleId));
            cmd.CommandText = "DELETE FROM [ScheduleResource] WHERE [ScheduleId] = @ScheduleId";
            cmd.ExecuteNonQuery();
        }
 
        private void PopulateAppointmentParameters(DbCommand cmd, Appointment apt)
        {
            cmd.Parameters.Add(CreateParameter("@Subject", apt.Subject));
            cmd.Parameters.Add(CreateParameter("@Start", apt.Start));
            cmd.Parameters.Add(CreateParameter("@End", apt.End));
            cmd.Parameters.Add(CreateParameter("@Description", apt.Description));
            cmd.Parameters.Add(CreateParameter("@Reminder", apt.Reminders));
 
 
            cmd.Parameters.Add(CreateParameter("@Email", apt.Attributes["Email"]));
            cmd.Parameters.Add(CreateParameter("@LastModified", apt.Attributes["LastModified"]));
            cmd.Parameters.Add(CreateParameter("@ProjectId", apt.Attributes["ProjectId"]));
            cmd.Parameters.Add(CreateParameter("@TicketId", apt.Attributes["TicketId"]));
            cmd.Parameters.Add(CreateParameter("@QuicklookId", apt.Attributes["QuicklookId"]));
            cmd.Parameters.Add(CreateParameter("@AppointmentColor", apt.Attributes["AppointmentColor"]));
            string rrule = null;
            if (apt.RecurrenceRule != string.Empty)
            {
                rrule = apt.RecurrenceRule;
            }
            cmd.Parameters.Add(CreateParameter("@RecurrenceRule", rrule));
 
            object parentId = null;
            if (apt.RecurrenceParentID != null)
            {
                parentId = apt.RecurrenceParentID;
            }
            cmd.Parameters.Add(CreateParameter("@RecurrenceParentId", parentId));
 
 
        }
 
        public override void Insert(RadScheduler owner, Appointment appointmentToInsert)
        {
            if (!PersistChanges)
            {
                return;
            }
            using (DbConnection conn = OpenConnection())
            using (DbTransaction tran = conn.BeginTransaction())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
                cmd.Transaction = tran;
                PopulateAppointmentParameters(cmd, appointmentToInsert);
                cmd.CommandText =
                    @" INSERT INTO [Schedules]
                                   ([Subject], [Start], [End],
                                    [RecurrenceRule], [RecurrenceParentID],
                                    [Email], [LastModified], [Description], [ProjectId], [TicketId], [QuicklookId], [Reminder], [AppointmentColor])
                          VALUES (@Subject, @Start, @End,
                                  @RecurrenceRule, @RecurrenceParentID,
                                  @Email, @LastModified, @Description, @ProjectId, @TicketId, @QuicklookId, @Reminder, @AppointmentColor)";
                if (DbFactory is SqlClientFactory)
                {
                    cmd.CommandText += Environment.NewLine + "SELECT SCOPE_IDENTITY()";
                }
                else
                {
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "SELECT @@IDENTITY";
                }
                int identity = Convert.ToInt32(cmd.ExecuteScalar());
 
                foreach (string resType in resourceKeys)
                {
                    FillSchedResources(appointmentToInsert, cmd, identity, resType);
                }
 
                tran.Commit();
            }
        }
 
        public override void Update(RadScheduler owner, Appointment appointmentToUpdate)
        {
            if (!PersistChanges)
            {
                return;
            }
            using (DbConnection conn = OpenConnection())
            {
                using (DbTransaction tran = conn.BeginTransaction())
                {
                    DbCommand cmd = DbFactory.CreateCommand();
                    cmd.Connection = conn;
                    cmd.Transaction = tran;
                    PopulateAppointmentParameters(cmd, appointmentToUpdate);
                    cmd.Parameters.Add(CreateParameter("@ScheduleId", appointmentToUpdate.ID));
                    cmd.CommandText =
                                  @"UPDATE [Schedules] SET [Subject] = @Subject, [Start] = @Start, [End] = @End,
                                        [RecurrenceRule] = @RecurrenceRule, [RecurrenceParentID]= @RecurrenceParentID,
                                        [Email] = @Email, [LastModified] = @LastModified, [Description] = @Description,
                                        [ProjectId] = @ProjectId, [TicketId] = @TicketId, [QuicklookId] = @QuicklookId,
                                        [Reminder] = @Reminder, [AppointmentColor] = @AppointmentColor WHERE [ScheduleId] = @ScheduleId";
                    cmd.ExecuteNonQuery();
                    ClearSchedResources(appointmentToUpdate.ID, cmd);
                    foreach (string resType in resourceKeys)
                    {
                        FillSchedResources(appointmentToUpdate, cmd, appointmentToUpdate.ID, resType);
                    }
                    tran.Commit();
                }
            }
        }
 
        public override void Delete(RadScheduler owner, Appointment appointmentToDelete)
        {
            if (!PersistChanges)
            {
                return;
            }
            using (DbConnection conn = OpenConnection())
            {
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.Connection = conn;
                using (DbTransaction tran = conn.BeginTransaction())
                {
                    cmd.Transaction = tran;
                    ClearSchedResources(appointmentToDelete.ID, cmd);
                    cmd.Parameters.Clear();
                    cmd.Parameters.Add(CreateParameter("@ScheduleId", appointmentToDelete.ID));
                    cmd.CommandText = "DELETE FROM [Schedules] WHERE [ScheduleId] = @ScheduleId";
                    cmd.ExecuteNonQuery();
                    tran.Commit();
                }
            }
        }
    }


Boyan Dimitrov
Telerik team
 answered on 16 Jul 2014
1 answer
121 views
How should I do if I want scheduler client-side data-binding with MS SQL Server?
Could anyone give me a sample?
Thanks!
Boyan Dimitrov
Telerik team
 answered on 16 Jul 2014
2 answers
177 views
I have a grid which uses the pop-up inline insert and edit form.  In it a have a dropdown list that updates a text box in the form after a selection from it.  The problem I have is that I have no alternative to the GetInsertItem method on the grid object.  I have researched for alternatives but so far all examples leads to either the UpdatedCommand or ItemCreated or ItemCommand events, which don't apply to my case.  Here's my code.

Private Sub RGExpenses_ItemCreated(sender As Object, e As GridItemEventArgs) Handles RGExpenses.ItemCreated
    If (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then
        Dim list As DropDownList = CType(CType(e.Item, GridEditableItem
​Description").Controls(0), DropDownList)
        list.AutoPostBack = True
        AddHandler list.SelectedIndexChanged, AddressOf list_SelectedIndexChanged
        SetAmount(list)
    End If
End Sub
 
Private Sub list_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'sets Item amount when change selected value
    SetAmount(CType(sender, DropDownList))
End Sub
 
Private Sub SetAmount(ByVal ddl As DropDownList)
    If Not IsNothing(ddl.SelectedItem) Then
        Dim decPAmount As Decimal = cDB.dbConsult(Application("db"), "SELECT TOP 1 Amount FROM Table1)
        If RGExpenses.MasterTableView.IsItemInserted Then
            CType(RGExpenses.MasterTableView.GetInsertItem.FindControl("TB_Amount"), TextBox).Text = decPAmount
        Else
            'here is where I need to find the control, but no method to do so
            CType(RGExpenses.MasterTableView.FindControl("TB_Amount"), TextBox).Text = decPAmount
        End If
    End If
End Sub

So as you can see, there is no problem on insert mode.  Incredibly, the problem is that I have no method for Edit mode to replicate what I'm doing on insert mode.  How can I reference the text box control within the edit form when in edit mode.

Thanks
nfigueroa
Top achievements
Rank 1
 answered on 16 Jul 2014
3 answers
408 views
I would like to add an image (stored in DB) to my PDF export. Now I am exporting PDF using:



grdiView1.MasterTableView.ExportToPdf();



I just want to add a single image to this pdf file from the database. Image will be outside the gridview lets say at the top left of the pdf file....



I hope somebody can help me with this...
Kostadin
Telerik team
 answered on 16 Jul 2014
1 answer
112 views
I have made a toggle JQuery button on the top of my page that when it is droping down the horizontal Radmenu items cut the JQuery dropped div. I have changed the position of div into absolute and made a  z-index but nothing changed. I tried to change the position of Radmenu into static again it didn't work. Is there any  solution to bring the RadItem menu under the JQuery dropped div?
Magdalena
Telerik team
 answered on 16 Jul 2014
5 answers
210 views
Hi,

I'm trying to insert items to destination listbox to desired index. If any item is selected in the destination lisbox then the transfered items should be inserted above the selected item. I'm using allowtransfer property for transferring the items.

In transferring event i used "e.Cancel" to cancel the regular transfer when there is any item selected in the destination listbox. 

e.Cancel = True

For Each item As RadListBoxItem In e.Items
     e.DestinationListBox.Items.Insert(e.DestinationListBox.SelectedIndex, item)
Next

Insert doesn't work. What am I doing wrong? It doesn't give any error but doesn't work either. I have other functionality for which I have to make this happen through code behind itself.

Thanks,
Arjun
ARJUN
Top achievements
Rank 1
 answered on 16 Jul 2014
11 answers
528 views
Hi, 

I'm trying to use the RadComobox Ajax control on the sharepoint webpart. but after opening the dropdown list if I scrolled the page from mouse wheel the list is sticking to a single position. 

I tried this solution but this is not working in my case. 

$(document).ready(function () {

    $(window).scroll(function () {

        var comboBox = $find("RadComboBox1");

        if (comboBox.DropDownVisible)

            comboBox.hideDropDown();

    });

});


Please help..
Hristo Valyavicharski
Telerik team
 answered on 16 Jul 2014
Narrow your results
Selected tags
Tags
+? more
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?