Wednesday, 9 December 2015

Telerik - Create RadHTML Chart Dynamically using C#

There are three simple steps:
 
1. Declare asp panel in your .aspx page:
<asp:Panel ID="pnlChart" runat="server"></asp:Panel>
 

3. copy paste following in your code behind class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Drawing;
using System.Data;

public partial class YourPage: Page
{

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LoadSampleChart();
        }
    }


private void LoadSampleChart()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Sale", typeof(Decimal));
        dt.Columns.Add("Returned", typeof(Decimal));
        dt.Columns.Add("SaleDate", typeof(DateTime));

        DataRow dr1 = dt.Rows.Add(); dr1["Sale"] = 85.00; dr1["Returned"] = 15.00; dr1["SaleDate"] = "2015/12/01"; //dt.Rows.Add(dr1);
        DataRow dr2 = dt.Rows.Add(); dr2["Sale"] = 50.00; dr2["Returned"] = 50.00; dr2["SaleDate"] = "2015/12/02"; //dt.Rows.Add(dr2);
        DataRow dr3 = dt.Rows.Add(); dr3["Sale"] = 25.00; dr3["Returned"] = 75.00; dr3["SaleDate"] = "2015/12/03"; //dt.Rows.Add(dr3);

        RadHtmlChart rdChart = new RadHtmlChart();
        rdChart.DataSource = dt;
        rdChart.Width = Unit.Pixel(1000);
        rdChart.Height = Unit.Pixel(800);
        rdChart.Style.Value = "margin: 0 auto";
        rdChart.PlotArea.XAxis.TitleAppearance.Text = "Sale Dates";

        rdChart.PlotArea.XAxis.LabelsAppearance.DataFormatString = "{0:dd-MMM-yy}";
        rdChart.PlotArea.XAxis.LabelsAppearance.TextStyle.Padding = "7px";
        rdChart.PlotArea.YAxis.MaxValue = 1;
        rdChart.Transitions = true;

        rdChart.Legend.Appearance.Position = Telerik.Web.UI.HtmlChart.ChartLegendPosition.Bottom;

        AddSeries("Sale", "X", rdChart, Color.Green, "Sale");
        AddSeries("Returned", "X", rdChart, Color.Red, "Returns");

        rdChart.PlotArea.XAxis.DataLabelsField = "SaleDate";
        rdChart.DataBind();

        pnlChart.Controls.Add(rdChart);
    }


 private void AddSeries(string YDataFieldName, String groupName, RadHtmlChart objChart, Color seriesColor, String legendName)
    {
        BarSeries objSeries = new BarSeries();
        objSeries.Appearance.FillStyle.BackgroundColor = seriesColor;
        objSeries.StackType = Telerik.Web.UI.HtmlChart.Enums.HtmlChartStackType.Stack100;
        objSeries.DataFieldY = YDataFieldName;
        objSeries.GroupName = groupName;
        objSeries.Name = legendName;
        objSeries.LabelsAppearance.Position = Telerik.Web.UI.HtmlChart.BarColumnLabelsPosition.Center;
        objSeries.LabelsAppearance.DataFormatString = "{0}%";
       
        objChart.PlotArea.Series.Add(objSeries);

    } 
}

Here is the output:

Thursday, 3 December 2015

How To Capture GPS information with Callback in Android - Just Copy/Paste

You need two classes and one activity to capture GPS information.


1. TrackingInfo class
2. MyCallback interface 
3. Activity class

Here is "TrackingInfo" class:

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class TrackingInfo  {
MyCallback mMyCallback;
public String mLongitude;
public String mLatitude;
public String CaptureDateTime;
public Context mContext;
LocationManager mLocationManager;

public static final String TAG = TrackingInfo.class.getSimpleName();

public TrackingInfo(Context ctx,MyCallback callback)
{
mContext=ctx;
mMyCallback=callback;
}
public void startGpsTracing() {
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
boolean gps = mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);

if (!gps) {
//L.i(TAG, "Gps is off");
//T.showShort(mContext, "Please enable GPS function");
mLatitude = "";
mLongitude = "";
return;
}

Location location = mLocationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
mLatitude = String.valueOf(location.getLatitude());
mLongitude = String.valueOf(location.getLongitude());
//L.i(TAG, "GPS update:" + mLatitude + "/"+ mLongitude);
}

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
try {
mLocationManager.requestLocationUpdates(
mLocationManager.getBestProvider(criteria, true), 2000, 10,
mLocationListener);
} catch (Exception e) {
e.printStackTrace();
}

}
private LocationListener mLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
if (location != null) {
mLatitude = String.valueOf(location.getLatitude());
mLongitude = String.valueOf(location.getLongitude());
if(mMyCallback!=null)
{
mMyCallback.callbackCall(mMyCallback.Key_GPSLocation,mLongitude,mLatitude);
//L.i(TAG, "GPS update:" + mLatitude + "/"+ mLongitude);
}
}
};

public void onProviderDisabled(String provider) {
};

public void onProviderEnabled(String provider) {
};

public void onStatusChanged(String provider, int status, Bundle extras) {
};
};

}

Here is "MyCallback" class:

public interface MyCallback {
public static final  String  Key_GPSLocation="GPSLocation"; 
void callbackCall(String key,String arg1,String arg2);

}

This is what you should have in your activity class (User Interface):

private TrackingInfo mTracker;
mTracker=new TrackingInfo(this,new MyCallback() {
@Override
public void callbackCall(String key, String arg1, String arg2) {
// TODO Auto-generated method stub
switch(key)
{
case MyCallback.Key_GPSLocation:
//Implement your own Toast here, arg1 and arg2 are longitude and latitude
// T.showShort(SurveyListActivity.this,  arg1+ "/"+ arg2);
break;
}
}
});
mTracker.startGpsTracing();

Note: You have to have following permission setup in application manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />