Editable GridView With Dynamic DropDown List Controls

Self-Innovator
Posted by in ASP.NET category on for Beginner level | Points: 250 | Views : 10198 red flag
Rating: 5 out of 5  
 1 vote(s)

This article covers on how drop down list controls are dynamically binded to grid view control.

Introduction


This article explains about binding the grid view control with drop down list dynamically.

Objective


Grid View plays a vital role commonly in all web applications. All operations like Editing,Updating, Deleting the records dynamically through Grid view control makes an better of handling the data. In this article Multiple Drop Down list are dynamically binded to Grid View Control.


Using the code


Here we will use a table called tbl_Registrations and tbl_Countrys
Screen 1


Screen 2

Screen 3


// JavaScript Validations
<head runat="server">
<title>User Registration</title>
<script language="javascript" type="text/javascript">

//Name Validation
function ValidateName(x) {
var AlphExp = /^[a-zA-Z ]+$/;
if (x.value.match(AlphExp)) {
return true;
}
else {
alert("Invalid Name");
x.value = "";
x.focus();
return false;
}
}
//Age Validation
function ValidateAge(x) {
var len = x.value.length;
var s_charcode = 0;
for (var s_i = 0; s_i < len; s_i++) {
s_charcode = x.value.charCodeAt(s_i);
if (!((s_charcode >= 48 && s_charcode <= 57))) {
alert("Invalid Age");
x.value = "";
x.focus();
return false;
}
}
return true;
}
//Email Validation
function ValidateEmail(x) {
var EmailExp = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
if (x.value.match(EmailExp)) {
return true;
}
else {
alert("Invalid Email id");
x.value = "";
x.focus();
return false;
}
}
//Grid View Control Empty Fields Validation
function ValidateGrid(x)
{
var gridView=document.getElementById('<%=GrdView.ClientID %>');
var selectedRowIndex=x.parentNode.parentNode.rowIndex;
var txtName=gridView.rows[parseInt(selectedRowIndex)].cells[0].children[0];
var txtAge=gridView.rows[parseInt(selectedRowIndex)].cells[1].children[0];
var txtEmail=gridView.rows[parseInt(selectedRowIndex)].cells[2].children[0];
var ddlCountry=gridView.rows[parseInt(selectedRowIndex)].cells[3].children[0].selectedIndex;
var ddlState=gridView.rows[parseInt(selectedRowIndex)].cells[4].children[0].selectedIndex;
var ddlCity=gridView.rows[parseInt(selectedRowIndex)].cells[5].children[0].selectedIndex;
if(txtName.value=="" || txtAge.value=="" || txtEmail.value=="" || ddlCountry<=0 || ddlState<=0 || ddlCity<=0)
{
alert('Please input all fields');
return false;
}
}
</script>
</head>

//Page Design with Multiple Drop Down List controls


<body>
<form id="form1" runat="server">
<div>
<table align="center">
<tr>
<td>
<asp:GridView ShowFooter="true" AutoGenerateColumns="False" ID="GrdView" runat="server"
CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="Id"
onrowcancelingedit="GrdView_RowCancelingEdit" onrowediting="GrdView_RowEditing"
onrowupdating="GrdView_RowUpdating" onrowdatabound="GrdView_RowDataBound"
onrowdeleting="GrdView_RowDeleting" onrowcommand="GrdView_RowCommand">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<Columns>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Name">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%#Bind("Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtName" runat="server" onChange='javascript:return ValidateName(this);' Text='<%#Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtNewName" runat="server" onChange='javascript:return ValidateName(this);'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Age">
<ItemTemplate>
<asp:Label ID="lblAge" runat="server" Text='<%#Eval("Age") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtAge" runat="server" onChange='javascript:return ValidateAge(this);' Text='<%#Bind("Age") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtNewAge" runat="server" onChange='javascript:return ValidateAge(this);'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>


<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Email">
<ItemTemplate>
<asp:Label ID="lblEmail" runat="server" Text='<%#Eval("Email") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmail" runat="server" onChange='javascript:return ValidateEmail(this);' Text='<%#Bind("Email") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtNewEmail" runat="server" onChange='javascript:return ValidateEmail(this);'></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%#Eval("Country") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlCountry" onselectedindexchanged="ddlCountry_SelectedIndexChanged" runat="server" AutoPostBack="True"></asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlNewCountry" onselectedindexchanged="ddlNewCountry_SelectedIndexChanged" AutoPostBack="true" runat="server"></asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="State">
<ItemTemplate>
<asp:Label ID="lblState" runat="server" Text='<%#Eval("State") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlState" AutoPostBack="true" OnSelectedIndexChanged="ddlState_SelectedIndexChanged" runat="server"></asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlNewState" OnSelectedIndexChanged="ddlNewState_SelectedIndexChanged" AutoPostBack="true" runat="server"></asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" HeaderText="City">
<ItemTemplate>
<asp:Label ID="lblCity" runat="server" Text='<%#Eval("City") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddlNewCity" runat="server"></asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderStyle-HorizontalAlign="Left" ShowHeader="false" HeaderText="Edit">
<ItemTemplate>
<asp:LinkButton ID="lnkEdit" runat="server" Text="Edit" CausesValidation="false" CommandName="Edit"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lnkUpdate" runat="server" OnClientClick='javascript:return ValidateGrid(this);' Text="Update" CommandName="Update" CausesValidation="true"></asp:LinkButton>
<asp:LinkButton ID="lnkCancel" runat="server" Text="Cancel" CommandName="Cancel" CausesValidation="false"></asp:LinkButton>
</EditItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="lnkAdd" runat="server" OnClientClick='javascript:return ValidateGrid(this);' Text="Insert" CommandName="Insert" CausesValidation="true"></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>

<asp:CommandField HeaderStyle-HorizontalAlign="Left" HeaderText="Delete" ShowDeleteButton="true" ShowHeader="true" />
</Columns>
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
</body>


Code Behind .cs File



using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;





Connection String
string Conn = ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString;   
Page Load Method
Protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
FillGridView();
}
}
User Defined Methods
 protected DataSet BindGridView()
{
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("select r.Id,r.Name,r.Age,r.Email,c.Name as Country,cn.Name as State,cnn.Name as City "
+ "from tbl_registrations r left outer join tbl_countrys c on r.countryId=c.id "
+ "left outer join tbl_Countrys cn on r.stateid=cn.id left outer join tbl_Countrys cnn on r.cityid=cnn.id", cnn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
return ds;
}
protected DataSet BindCountrys()
{
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("select * from tbl_Countrys where CountryId is null order by name", cnn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
return ds;
}
protected DataSet BindStates(string Cid)
{
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("select * from tbl_Countrys where CountryId="+Cid+"", cnn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
return ds;
}
protected DataSet BindCitys(string CyId)
{
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("select * from tbl_Countrys where CountryId="+CyId+"", cnn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
return ds;
}
protected void FillGridView()
{
try
{
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("select r.Id,r.Name,r.Age,r.Email,c.Name as Country,cn.Name as State,cnn.Name as City "
+"from tbl_registrations r left outer join tbl_countrys c on r.countryId=c.id "
+"left outer join tbl_Countrys cn on r.stateid=cn.id left outer join tbl_Countrys cnn on r.cityid=cnn.id", cnn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
GrdView.DataSource = ds;
GrdView.DataBind();
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}










Grid View Events



protected void GrdView_RowEditing(object sender, GridViewEditEventArgs e)
{
GrdView.EditIndex = e.NewEditIndex;
FillGridView();
}
protected void GrdView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GrdView.EditIndex = -1;
FillGridView();
}
protected void GrdView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
try
{
SqlConnection cnn = new SqlConnection(Conn);
int Id = Convert.ToInt32(GrdView.DataKeys[e.RowIndex].Value);
TextBox txtName = (TextBox)GrdView.Rows[e.RowIndex].FindControl("txtName");
TextBox txtAge = (TextBox)GrdView.Rows[e.RowIndex].FindControl("txtAge");
TextBox txtEmail = (TextBox)GrdView.Rows[e.RowIndex].FindControl("txtEmail");
DropDownList ddlCountry = (DropDownList)GrdView.Rows[e.RowIndex].FindControl("ddlCountry");
DropDownList ddlState = (DropDownList)GrdView.Rows[e.RowIndex].FindControl("ddlState");
DropDownList ddlCity = (DropDownList)GrdView.Rows[e.RowIndex].FindControl("ddlCity");
SqlCommand cmd = new SqlCommand("Update tbl_Registrations Set Name='" + txtName.Text.Trim() + "',Age=" + txtAge.Text.Trim() + ",Email='" + txtEmail.Text.Trim() + "',CountryId=" + ddlCountry.SelectedItem.Value + ",StateId=" + ddlState.SelectedItem.Value + ",CityId=" + ddlCity.SelectedItem.Value + " where Id=" + Id + "", cnn);
cnn.Open();
cmd.ExecuteNonQuery();
GrdView.EditIndex = -1;
FillGridView();
cnn.Close();
ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Records Updated Successfully');", true);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void GrdView_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
DataRowView drv = e.Row.DataItem as DataRowView;
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList ddlCountry = (DropDownList)e.Row.FindControl("ddlCountry");
DropDownList ddlState = (DropDownList)e.Row.FindControl("ddlState");
DropDownList ddlCity = (DropDownList)e.Row.FindControl("ddlCity");
DataSet dsGrdValues = BindGridView();
DataSet dsCountrys = BindCountrys();
string SelCountry = drv[4].ToString();
string SelState = drv[5].ToString();
string SelCity = drv[6].ToString();
ddlCountry.DataSource = dsCountrys;
ddlCountry.DataTextField = "Name";
ddlCountry.DataValueField = "Id";
ddlCountry.DataBind();
ddlCountry.Items.Insert(0, "-Select-");
for (int i = 0; i < ddlCountry.Items.Count; i++)
{
if (ddlCountry.Items[i].Text.Trim().CompareTo(SelCountry.Trim()) == 0)
{
ddlCountry.SelectedIndex = i;
break;
}
}
DataSet dsStates = BindStates(ddlCountry.SelectedValue);
ddlState.DataSource = dsStates;
ddlState.DataTextField = "Name";
ddlState.DataValueField = "Id";
ddlState.DataBind();
ddlState.Items.Insert(0, "-Select-");
for (int i = 0; i < ddlState.Items.Count; i++)
{
if (ddlState.Items[i].Text.Trim().CompareTo(SelState.Trim()) == 0)
{
ddlState.SelectedIndex = i;
break;
}
}
DataSet dsCitys = BindCitys(ddlState.SelectedValue);
ddlCity.DataSource = dsCitys;
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Id";
ddlCity.DataBind();
ddlCity.Items.Insert(0, "-Select-");
for (int i = 0; i < ddlCity.Items.Count; i++)
{
if (ddlCity.Items[i].Text.Trim().CompareTo(SelCity.Trim()) == 0)
{
ddlCity.SelectedIndex = i;
break;
}
}
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
DropDownList ddlNewCountry = (DropDownList)e.Row.FindControl("ddlNewCountry");
DropDownList ddlNewState = (DropDownList)e.Row.FindControl("ddlNewState");
DropDownList ddlNewCity = (DropDownList)e.Row.FindControl("ddlNewCity");
ddlNewCountry.DataSource = BindCountrys();
ddlNewCountry.DataTextField = "Name";
ddlNewCountry.DataValueField = "Id";
ddlNewCountry.DataBind();
ddlNewCountry.Items.Insert(0, "-Select-");
ddlNewState.Items.Insert(0, "-Select-");
ddlNewCity.Items.Insert(0, "-Select-");
}
if (e.Row.RowType != DataControlRowType.DataRow) return;
int lastCellIndex = e.Row.Cells.Count - 1;
LinkButton lnkDelete = (LinkButton)e.Row.Cells[lastCellIndex].Controls[0];
lnkDelete.OnClientClick = "if(!window.confirm('Are you sure do you want to delete this record?'))return false;";
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DropDownList Country = (DropDownList)sender;
GridViewRow row = (GridViewRow)(Country.Parent.Parent);
Country.DataTextField = "Name";
string CCode = Country.SelectedItem.Value;
DataSet dsGetStates = BindStates(CCode);
DropDownList ddlState = (DropDownList)row.FindControl("ddlState");
DropDownList ddlCity = (DropDownList)row.FindControl("ddlCity");
if (dsGetStates.Tables[0].Rows.Count > 0)
{
ddlState.DataSource = dsGetStates;
ddlState.DataTextField = "Name";
ddlState.DataBind();
ddlState.Items.Insert(0, "-Select-");
ddlCity.Items.Clear();
ddlCity.Items.Insert(0, "-Select-");
}
else
{
ddlState.Items.Clear();
ddlState.Items.Insert(0, "-Select-");
ddlCity.Items.Clear();
ddlCity.Items.Insert(0, "-Select-");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void ddlNewCountry_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DropDownList Country = (DropDownList)sender;
GridViewRow row = (GridViewRow)(Country.Parent.Parent);
Country.DataTextField = "Name";
Country.DataValueField = "Id";
string CCode = Country.SelectedItem.Value;
DataSet dsGetStates = BindStates(CCode);
DropDownList ddlNewState = (DropDownList)row.FindControl("ddlNewState");
DropDownList ddlNewCity = (DropDownList)row.FindControl("ddlNewCity");
if (dsGetStates.Tables[0].Rows.Count > 0)
{
ddlNewState.DataSource = dsGetStates;
ddlNewState.DataTextField = "Name";
ddlNewState.DataValueField = "Id";
ddlNewState.DataBind();
ddlNewState.Items.Insert(0, "-Select-");
ddlNewCity.Items.Clear();
ddlNewCity.Items.Insert(0, "-Select-");
}
else
{
ddlNewState.Items.Clear();
ddlNewState.Items.Insert(0, "-Select-");
ddlNewCity.Items.Clear();
ddlNewCity.Items.Insert(0, "-Select-");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DropDownList State = (DropDownList)sender;
GridViewRow row = (GridViewRow)(State.Parent.Parent);
State.DataTextField = "Name";
string StCode = State.SelectedItem.Value;
DataSet dsGetCitys=BindCitys(StCode);
DropDownList ddlCity = (DropDownList)row.FindControl("ddlCity");
if (dsGetCitys.Tables[0].Rows.Count > 0)
{
ddlCity.DataSource = dsGetCitys;
ddlCity.DataTextField = "Name";
ddlCity.DataValueField = "Id";
ddlCity.DataBind();
ddlCity.Items.Insert(0, "-Select-");
}
else
{
ddlCity.Items.Clear();
ddlCity.Items.Insert(0, "-Select-");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void ddlNewState_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DropDownList State = (DropDownList)sender;
GridViewRow row = (GridViewRow)(State.Parent.Parent);
State.DataTextField = "Name";
State.DataValueField = "Id";
string StCode = State.SelectedItem.Value;
DataSet dsGetCitys = BindCitys(StCode);
DropDownList ddlNewCity = (DropDownList)row.FindControl("ddlNewCity");
if (dsGetCitys.Tables[0].Rows.Count > 0)
{
ddlNewCity.DataSource = dsGetCitys;
ddlNewCity.DataTextField = "Name";
ddlNewCity.DataValueField = "Id";
ddlNewCity.DataBind();
ddlNewCity.Items.Insert(0, "-Select-");
}
else
{
ddlNewCity.Items.Clear();
ddlNewCity.Items.Insert(0, "-Select-");
}
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
}
protected void GrdView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
int id = Convert.ToInt32(GrdView.DataKeys[e.RowIndex].Value);
SqlConnection cnn = new SqlConnection(Conn);
SqlCommand cmd = new SqlCommand("Delete from tbl_Registrations where Id="+id+"",cnn);
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Record Deleted Successfully');", true);
FillGridView();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
protected void GrdView_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName.Equals("Insert"))
{
SqlConnection cnn = new SqlConnection(Conn);
TextBox txtNewName = (TextBox)GrdView.FooterRow.FindControl("txtNewName");
TextBox txtNewAge = (TextBox)GrdView.FooterRow.FindControl("txtNewAge");
TextBox txtNewEmail = (TextBox)GrdView.FooterRow.FindControl("txtNewEmail");
DropDownList ddlNewCountry = (DropDownList)GrdView.FooterRow.FindControl("ddlNewCountry");
DropDownList ddlNewState = (DropDownList)GrdView.FooterRow.FindControl("ddlNewState");
DropDownList ddlNewCity = (DropDownList)GrdView.FooterRow.FindControl("ddlNewCity");
SqlCommand cmd = new SqlCommand("Insert into tbl_Registrations values('" + txtNewName.Text.Trim() + "'," + txtNewAge.Text.Trim() + ",'" + txtNewEmail.Text.Trim() + "'," + ddlNewCountry.SelectedItem.Value + "," + ddlNewState.SelectedItem.Value + "," + ddlNewCity.SelectedItem.Value + ")", cnn);
cnn.Open();
cmd.ExecuteNonQuery();
FillGridView();
cnn.Close();
ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Record Added Successfully');", true);
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}

Screen Shots
Screen 1



Screen 2



Screen 3


Conclusion

This article explains about editing the gridview control with its dropdown list data dynamically and it uses nested dropdown list control.


Page copy protected against web site content infringement by Copyscape

About the Author

Self-Innovator
Full Name: Sayeed Ahmed
Member Level: Bronze
Member Status: Member
Member Since: 12/22/2011 7:45:35 AM
Country: India
Join Hands Change lives Thanks & Regards Straight Edge Society


Login to vote for this post.

Comments or Responses

Posted by: B4love2013 on: 3/2/2013 | Points: 25
Hello my Dear.
I guess you will not surprise to receive my mail? i saw your profile on [www.best-1-site.com]and it sound well.
My name is Benita,Single lady. I am here looking for a good friend.i believe you know that true and trusted friends are worth searching for, i will be happy if you accept my friend request as i am willing to tell you more about myself and to send you my photos, please if you will be willing to accept my request reply me directly to my mail address (benitadesm@yahoo.co.uk) so that i will introduce myself to you,i am waiting for your reply soon.
Remember the distance or color does not matter but love and concern matters a lot in life
Thanks.
(benitadesm@yahoo.co.UK)
Benita.

Login to post response

Comment using Facebook(Author doesn't get notification)