Microsoft.NET

……………………………………………….Expertise in .NET Technologies

Working with Repeater Control in ASP.NET

Posted by Ravi Varma Thumati on November 5, 2009

Introduction

In this article we will discuss about Repeater Control in general and how to bind the repeater into the data source to display the data.

Repeater control normally being used to display repeating items. It is almost has the same functionality like the DataGrid or GridView, except that the repeater is a lightweight and faster control compared to DataGrid or GridView. Repeater control does not support Paging and Sorting. However if you only need to display repeated items in table without the need to sort or paging capability, then the repeater is the perfect control for this.

In a Repeater control, the data is rendered as DataItems that are defined using one or more templates. You can even use HTML tags such as <li> <ul> or <div> if required. Similar to DataGrid?, DataList, or GridView controls., the Repeater control has a DataSource property that is used to set the DataSource of this control to any ICollection, IEnumerable, or IListSource instance. Once this is set, the data from one of these types of data sources can be easily bound to the Repeater control using its DataBind()

Using the Repeater Control

The Repeater control is a data-bound control that uses templates to display data. It does not have any built-in support for paging, editing, or sorting of the data that is rendered through one or more of its templates.

The Repeater control works by looping through the records in your data source and then repeating the rendering of one of its templates called the ItemTemplate, one that contains the records that the control needs to render. We will learn more about the templates of the Repeater control in this section. Before we learn about the templates and how to use them, let us take a look at how we can get started with this control.

To use this control, drag and drop the control in the design view of the web form onto a web form from the toolbox. Refer to the following screenshot:

1 

You can also drag and drop the Repeater control from the toolbox onto the source view directly. This is shown in the following screenshot:

2

For customizing the behavior of this control, you have to use the built-in templates that this control comes with. These templates are actually blocks of HTML code. The Repeater control contains the following five templates:

1.HeaderTemplate

2.ItemTemplate

3.AlternatingItemTemplate

4.SeparatorTemplate

5.FooterTemplate

When the Repeater control is bound to a data source, the data from the data source is displayed using the ItemTemplate element and any other optional elements, if used. Note that the contents of the HeaderTemplate and the FooterTemplate are rendered once for each Repeater control.

The contents of the ItemTemplate are rendered for each record in the control. You can also use the additional AlternatingItemTemplate element after the ItemTemplate element for specifying the appearance of each alternate record. You can also use the SeparatorTemplate element between each record for specifying the separators for the records.

 Default syntax of the Repeater control is as follows:

 <asp:Repeater ID=”ControlID” runat=”server”>

 <AlternatingItemTemplate />

 <FooterTemplate />

 <HeaderTemplate />

 <ItemTemplate />

 <SeparatorTemplate />

</asp:Repeater>

Following are the members of the repeater control:

DataMember and DataSource: These properties allow the control to bind to the datasource. Note if there are more then one tables in DataSource then DataMember is used to identify the table to use.

Items: Identifies the item in the Repeater control it works as a collection of RepeatorItem objects.

 DataBind(): Used to bind the Data with a DataSource.

ItemCreated Event: This event occurs when item is created and added to the Repeator Control.

ItemDataBound Event: Event occurs before rendering the item on the page. Note item is data bound before the occurrence of this event.

ItemCommand Event: Occurs on the click event of a button in Repeater control.

DataItem: Provides the data associated with this item.

ItemIndex: Indicates the index of an item in the Repeater control.

ItemType: Returns one of the ListItemType enumerated values identifying what template the item is in.

 Using DataBinder.Eval method:

The System.Web.UI.DataBinder class provides a useful static method DataBinder.Eval, which can be used to evaluate the data at run time using late binding. This function can be used with the Visual Studio

IDE or can be manually coded as

  <%#  DataBinder.Eval(Container.DataItem,”FieldName”,”Format”) %>

This evaluates and returns the data at run time. This can be used with Repeater, DataList and DataGrid controls though there will be a performance penalty because of the late binding mechanism used.

Binding Data using Repeater Control

The Repeater control may be bound to a database table, an XML file, a data table or another list of items.

By Using XML File:

We will use the following XML file in our examples (“cdcatalog.xml”):

<?xml version=”1.0″ encoding=”ISO-8859-1″?>

<catalog>
<cd>
  <title>Empire Burlesque</title>
  <artist>Bob Dylan</artist>
  <country>USA</country>
  <company>Columbia</company>
  <price>10.90</price>
  <year>1985</year>
</cd>
<cd>
  <title>Hide your heart</title>
  <artist>Bonnie Tyler</artist>
  <country>UK</country>
  <company>CBS Records</company>
  <price>9.90</price>
  <year>1988</year>
</cd>
<cd>
  <title>Greatest Hits</title>
  <artist>Dolly Parton</artist>
  <country>USA</country>
  <company>RCA</company>
  <price>9.90</price>
  <year>1982</year>
</cd>
<cd>
  <title>Still got the blues</title>
  <artist>Gary Moore</artist>
  <country>UK</country>
  <company>Virgin records</company>
  <price>10.20</price>
  <year>1990</year>
</cd>
<cd>
  <title>Eros</title>
  <artist>Eros Ramazzotti</artist>
  <country>EU</country>
  <company>BMG</company>
  <price>9.90</price>
  <year>1997</year>
</cd>
</catalog>

First, import the “System.Data” namespace. We need this namespace to work with DataSet objects. Include the following directive at the top of an .aspx page:

Next, create a DataSet for the XML file and load the XML file into the DataSet when the page is first loaded:

VB

<script runat=”server”>
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath(“cdcatalog.xml”))

  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub

 

C#

Page_Load

{

            If (! Page.IsPostBack)

{

            DataSet mycdcatalog = new DataSet;

            Mycdcatalog.ReadXml(MapPath[“cdcatalog.xml”]);

                        cdcatalog.DataSource=mycdcatalog
                       cdcatalog.DataBind()

}

}

Then we create a Repeater control in an .aspx page. The contents of the <HeaderTemplate> element are rendered first and only once within the output, then the contents of the <ItemTemplate> element are repeated for each “record” in the DataSet, and last, the contents of the <FooterTemplate> element are rendered once within the output:

<html>
<body>
<form runat=”server”>

<asp:Repeater runat=”server”>

<HeaderTemplate>
<table border=”1″ width=”100%”>
<tr>
<th>Title</th>
<th>Artist</th>
<th>Country</th>
<th>Company</th>
<th>Price</th>
<th>Year</th>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td><%#Container.DataItem(“title”)%></td>
<td><%#Container.DataItem(“artist”)%></td>
<td><%#Container.DataItem(“country”)%></td>
<td><%#Container.DataItem(“company”)%></td>
<td><%#Container.DataItem(“price”)%></td>
<td><%#Container.DataItem(“year”)%></td>
</tr>
</ItemTemplate>

<FooterTemplate>
</table>
</FooterTemplate>

</asp:Repeater>

</form>

</body>
</html>

By Using Data Table

Below is the code snippet you can use to display the data into the repeater

<asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate>
        <table border="1">
            <tr>
                <th>
                    <asp:Label ID="lblCode" Text="Employee ID" runat="server" />
                </th>
                <th>
                    <asp:Label ID="lblName" Text="Employee Name" runat="server" />
                </th>
                <th>
                    <asp:Label ID="lblSalary" Text="Employee Salary" runat="server" />
                </th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr bgcolor="aqua">
            <td>
                <%# DataBinder.Eval(Container.DataItem, "EmpID")%>
            </td>
            <td>
                <%# DataBinder.Eval(Container.DataItem, "EmpName")%>
            </td>
            <td>
                <%# DataBinder.Eval(Container.DataItem, "EmpSalary")%>
            </td>
        </tr>
    </ItemTemplate>
    <SeparatorTemplate>
        <tr bgcolor="lime">
            <td>
                <hr>
            </td>
            <td>
                <hr>
            </td>
            <td>
                <hr>
            </td>
        </tr>
    </SeparatorTemplate>
    <AlternatingItemTemplate>
        <tr bgcolor="yellow">
            <td>
                <%# DataBinder.Eval(Container.DataItem, EmpID)%>
            </td>
            <td>
                <%# DataBinder.Eval(Container.DataItem, EmpName)%>
            </td>
            <td>
                <%# DataBinder.Eval(Container.DataItem, EmpSalary)%>
            </td>
        </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>
        <table border="1">
            <tr bgcolor="#0xffaa">
                <td>
                    Total Records:
                    <%#totalRecords%>
                </td>
            </tr>
        </table>
        </table>
    </FooterTemplate>
</asp:Repeater>

Then in the Page_Load Event of the Page, we will bind the repeater into the datasource. We will just create the Data Table programmatically

protected int TotalRecords;
protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("EmpID"));
    dt.Columns.Add(new DataColumn("EmpName"));
    dt.Columns.Add(new DataColumn("EmpSalary"));
   
    DataRow dr = new DataRow();
    dr["EmpID"] = "1";
    dr["EmpName"] = "James";
    dr["EmpSalary"] = "100";
    dt.Rows.Add(dr);
 
    DataRow dr = new DataRow();
    dr["EmpID"] = "1";
    dr["EmpName"] = "Jimy";
    dr["EmpSalary"] = "200";
    dt.Rows.Add(dr);
 
    DataRow dr = new DataRow();
    dr["EmpID"] = "1";
    dr["EmpName"] = "John";
    dr["EmpSalary"] = "300";
    dt.Rows.Add(dr);
   
    totalRecords = dt.Rows.Count; 
    Repeater1.DataBind();

}

By Using DataBase

In the following example you will learn how you can access data into Repeater control from DataBase.

To create a list within an HTML table, you might declare the <table> tag in the HeaderTemplate, a table row in the ItemTemplate, and the </table> tag in the FooterTemplate as follows-

Default.aspx file:

<%@ Page Language=”C#” AutoEventWireup=”true”  CodeFile=”Default.aspx.cs” Inherits=”_Default” Debug=”true” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;

<html xmlns=”http://www.w3.org/1999/xhtml&#8221; >

<head runat=”server”>

    <title>Untitled Page</title>

</head>

<body>

    <form id=”form1″ runat=”server”>

    <div>

        <asp:Repeater ID=”Repeater1″ runat=”server” OnItemCommand=”repeater1_itemcomand”>

       <HeaderTemplate>

        <table border=5>

        <tr>

         <td><b>Roll no</b></td>

         <td><b>Name</b></td>

         <td><b>Course</b></td>

        </tr>

       </HeaderTemplate>

       <ItemTemplate>

        <tr>

        <td><%# DataBinder.Eval(Container,”DataItem.Rollno”) %></td>

        <td><%# DataBinder.Eval(Container,”dataitem.Name”) %></td>

        <td><%# DataBinder.Eval(Container,”dataitem.Course”) %></td>

        </tr>

       </ItemTemplate>

       <AlternatingItemTemplate>

        <tr style=”background-color:Yellow”>

        <td><%# DataBinder.Eval(Container,”dataitem.Rollno”) %></td>

        <td><%# DataBinder.Eval(Container,”dataitem.Name”) %></td>

        <td><%# DataBinder.Eval(Container,”dataitem.Course”) %></td>

        </tr>

       </AlternatingItemTemplate>

       <FooterTemplate></table></FooterTemplate>      

       </asp:Repeater>

    </div>

    </form>

</body>

</html>

 

We write the code on page load to access the table.

Default.aspx.cs:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page

{

    SqlConnection con;

    SqlCommand com = new SqlCommand();

    protected void Page_Load(object sender, EventArgs e)

    {

     con = new SqlConnection(“Data Source=xyz;Initial Catalog=student; uid=sa;pwd=”);

    com.Connection = con;

    com.CommandText = “select * from student”;

    con.Open();

    Repeater1.DataSource= com.ExecuteReader();

    Repeater1.DataBind();

    con.Close();

    }

    protected void repeater1_itemcomand(object source, RepeaterCommandEventArgs e)

    {}

}

The Header and the Footer templates of the Repeater control are still rendered even if the data source does not contain any data. If you want to suppress their display, you can use the Visible property of the Repeater control and use it to suppress the display of these templates with a simple logic. Here is how you specify the Visible property of this control in your .aspx file to achieve this:

Visible="<%# Repeater1.Items.Count > 0 %>"

When you specify the Visible property as shown here, the Repeater is made visible only if there are records in your data source.

Using the <AlternatingItemTemplate>

You can add an <AlternatingItemTemplate> element after the <ItemTemplate> element to describe the appearance of alternating rows of output. In the following example each other row in the table will be displayed in a light grey color:

<%@ Import Namespace=”System.Data” %>

<script runat=”server”>
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath(“cdcatalog.xml”))
  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub
</script>

<html>
<body>
<form runat=”server”>
<asp:Repeater runat=”server”>

<HeaderTemplate>
<table border=”1″ width=”100%”>
<tr>
<th>Title</th>
<th>Artist</th>
<th>Country</th>
<th>Company</th>
<th>Price</th>
<th>Year</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem(“title”)%></td>
<td><%#Container.DataItem(“artist”)%></td>
<td><%#Container.DataItem(“country”)%></td>
<td><%#Container.DataItem(“company”)%></td>
<td><%#Container.DataItem(“price”)%></td>
<td><%#Container.DataItem(“year”)%></td>
</tr>
</ItemTemplate>

<AlternatingItemTemplate>
<tr bgcolor=”#e8e8e8″>
<td><%#Container.DataItem(“title”)%></td>
<td><%#Container.DataItem(“artist”)%></td>
<td><%#Container.DataItem(“country”)%></td>
<td><%#Container.DataItem(“company”)%></td>
<td><%#Container.DataItem(“price”)%></td>
<td><%#Container.DataItem(“year”)%></td>
</tr>
</AlternatingItemTemplate>

<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>

</body>
</html>

Using the <SeparatorTemplate>

The <SeparatorTemplate> element can be used to describe a separator between each record. The following example inserts a horizontal line between each table row:

<%@ Import Namespace=”System.Data” %>
<script runat=”server”>
sub Page_Load
if Not Page.IsPostBack then

  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath(“cdcatalog.xml”))
  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub
</script>

<html>
<body>
<form runat=”server”>
<asp:Repeater runat=”server”>

<HeaderTemplate>
<table border=”0″ width=”100%”>
<tr>
<th>Title</th>
<th>Artist</th>
<th>Country</th>
<th>Company</th>
<th>Price</th>
<th>Year</th>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td><%#Container.DataItem(“title”)%></td>
<td><%#Container.DataItem(“artist”)%></td>
<td><%#Container.DataItem(“country”)%></td>
<td><%#Container.DataItem(“company”)%></td>
<td><%#Container.DataItem(“price”)%></td>
<td><%#Container.DataItem(“year”)%></td>
</tr>
</ItemTemplate>

<SeparatorTemplate>
<tr>
<td colspan=”6″><hr /></td>
</tr>
</SeparatorTemplate>

<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>

</body>
</html>

 Handling Events with in Repeater Control

<%@ Page AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="zASPNETEventProblem._Default" EnableViewState="true" %>
<!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 runat="server">
    <div>
        <asp:Repeater runat="server">
            <ItemTemplate>
                <asp:CheckBox runat="server" Text='<%# Container.DataItem %>' AutoPostBack="true" /><br />
            </ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<string> arrTemp = new List<string>();
                arrTemp.Add("dd");
                arrTemp.Add("d2");
                arrTemp.Add("d3");
                Repeater1.DataSource = arrTemp;
                Repeater1.DataBind();
                foreach (CheckBox c in GetCheckboxes())
                {
                    c.AutoPostBack = true;
                    c.CheckedChanged += new EventHandler(c_CheckedChanged);
                }
            }
        }
        void c_CheckedChanged(object sender, EventArgs e)
        {
            Console.WriteLine("hit event");
        }
        private List<CheckBox> GetCheckboxes()
        {
            List<CheckBox> arrCheckBox = new List<CheckBox>();
            foreach (RepeaterItem itm in Repeater1.Items)
            {
                foreach (Control c in itm.Controls)
                {
                    if (c is CheckBox)
                    {
                        arrCheckBox.Add((CheckBox)c);
                    }
                }
            }
            return arrCheckBox;
}

Another Example

<%@ Page  %>

<%@ Import Namespace=”System.Data” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0
Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;

<script runat=”server”>

   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Repeater1.DataSource = new string[] { “apples”, “oranges”,”grapes” };
            Repeater1.DataBind();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        int total = 0;
        foreach (RepeaterItem ri in Repeater1.Items)
        {
            CheckBox cb = (CheckBox)ri.FindControl(“CheckBox1”);
            if (cb != null && cb.Checked)
            {
                TextBox textBoxQuantity = (TextBox)ri.FindControl(“TextBoxQuantity”);
                int price;
                if (textBoxQuantity != null &&
                    int.TryParse(textBoxQuantity.Text, out price))
                    total += price;
            }
        }
        Response.Write(total);
    }
</script>

<html>
<head runat=”server”>
    <title>tada</title>
</head>
<body>
    <form runat=”server”>
    <div>
        <asp:Repeater runat=”server”>
        <HeaderTemplate>
            <ul style=”list-style-type:decimal”>
        </HeaderTemplate>
        <ItemTemplate>
            <li>
                <asp:CheckBox Text='<%# Container.DataItem %>’
                runat=”server” />
                <br />
            Quantity: <asp:TextBox runat=”server”></asp:TextBox>   
            </li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
        </asp:Repeater>
        <asp:Button runat=”server” Text=”Calculate”
        />
    </div>
    </form>
</body>
</html>

Another Example

  1. <%@ Page Language=”C#” MasterPageFile=”~/MasterPage.master” AutoEventWireup=”true” CodeFile=”amntanquantityforrepeater.aspx.cs” Inherits=”amntanquantityforrepeater” Title=”Untitled Page” %>   
  2.   
  3. <asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ Runat=”Server”>   
  4.  <script type=”text/javascript”>   
  5.         function Calculate()   
  6.         {    
  7.             
  8.               
  9.   
  10.                 var rowtotal = 0.0;   
  11.                 var cntrls = document.getElementsByTagName(“input”);   
  12.                 for(var i = 0 ; i < cntrls.length ; i++)   
  13.                 {   
  14.                     if(cntrls[i].id.indexOf(“txtQuantity”) >= 0)   
  15.                     {                      
  16.                         var chk = cntrls[i].id.replace(“txtQuantity”,”chkSelect”);                       
  17.                         var price = cntrls[i].id.replace(“txtQuantity”,”lblPrice”);                     
  18.                            
  19.                         if(cntrls[i].value != “” && document.getElementById(chk).checked == true)                 
  20.                             rowtotal +=  parseFloat(cntrls[i].value) * parseFloat(document.getElementById(price).innerHTML) ;   
  21.                          
  22.                     }   
  23.                 }   
  24.               
  25.               
  26.            document.getElementById(‘<%= lblSum.ClientID %>’).innerHTML = rowtotal;   
  27.               
  28.         }   
  29.     </script>   
  30.     <asp:Repeater ID=”Repeater1″ runat=”server”    
  31.         onitemdatabound=”Repeater1_ItemDataBound”>   
  32.         <ItemTemplate>   
  33.             <table>   
  34.                 <tr>   
  35.                     <td>   
  36.                         <asp:CheckBox ID=”chkSelect” runat=”server” />   
  37.                         <asp:Label ID=”lblPrice” runat=”server” Text='<%# Bind(“Price”) %>’ ></asp:Label>   
  38.                         </td>   
  39.                     <td>   
  40.                         <asp:TextBox ID=”txtQuantity” runat=”server”></asp:TextBox></td>   
  41.                     <td></td>   
  42.                 </tr>   
  43.             </table>   
  44.         </ItemTemplate>   
  45.     </asp:Repeater>   
  46.     Total Sum :<asp:Label ID=”lblSum” runat=”server” Text=”Label”></asp:Label>   
  47.     <asp:Button ID=”btnClick” runat=”server” Text=”ShowAmount” />   
  48. </asp:Content>   
  49.   
  50. using System;   
  51. using System.Collections;   
  52. using System.Configuration;   
  53. using System.Data;   
  54. using System.Linq;   
  55. using System.Web;   
  56. using System.Web.Security;   
  57. using System.Web.UI;   
  58. using System.Web.UI.HtmlControls;   
  59. using System.Web.UI.WebControls;   
  60. using System.Web.UI.WebControls.WebParts;   
  61. using System.Xml.Linq;   
  62.   
  63. public partial class amntanquantityforrepeater : System.Web.UI.Page   
  64. {   
  65.     protected void Page_Load(object sender, EventArgs e)   
  66.     {   
  67.         btnClick.Attributes.Add(“onclick”, “javascript:return Calculate()”);   
  68.         if (!IsPostBack)   
  69.         {   
  70.             BindData();   
  71.         }   
  72.     }   
  73.     private void BindData()   
  74.     {   
  75.         DataTable dt = new DataTable();   
  76.         dt.Columns.Add(“Price”);   
  77.         for (int vLoop = 1; vLoop <= 10; vLoop++)   
  78.         {   
  79.             DataRow dr = dt.NewRow();   
  80.             dr[“Price”] = vLoop;   
  81.             dt.Rows.Add(dr);   
  82.         }   
  83.         Repeater1.DataSource = dt;   
  84.         Repeater1.DataBind();   
  85.     }   
  86.     protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)   
  87.     {   
  88.         if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)   
  89.         {   
  90.             Label lblPrice = (Label)e.Item.FindControl(“lblPrice”);   
  91.             lblPrice.Attributes.Add(“style”, “display:none;”);   
  92.         }   
  93.     }   
  94. }  
Advertisements

3 Responses to “Working with Repeater Control in ASP.NET”

  1. You ought to really take into consideration engaged on growing this weblog into a serious authority on this market. You evidently have a grasp deal with of the matters everyone seems to be trying to find on this website in any case and you can actually even earn a buck or two off of some advertisements. I might explore following recent matters and elevating the quantity of write ups you put up and I assure you’d begin seeing some amazing focused traffic within the close to future. Just a thought, good luck in whatever you do!

  2. There is definitely a lot to know about this. I think you made some wonderful points in this post.

  3. Great Post and Helpfull information!, thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: