Introduction:
In this article, i am going to explain how to perform a silverlight datagrid insert update delete functionalities.
Main:
Silverlight datagrid is defined in namespace System.Windows.Controls.Data,
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="AspDotNetCodesOnline.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<data:DataGrid x:Name="dgSilverligh" AutoGenerateColumns="false" Width="450" Height="200" RowDetailsVisibilityMode="VisibleWhenSelected" >
<data:DataGrid.RowDetailsTemplate>
<DataTemplate >
<TextBlock Text="Row details go here"></TextBlock>
</DataTemplate>
</data:DataGrid.RowDetailsTemplate>
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding Member_id}" Header="ID" ></data:DataGridTextColumn>
<data:DataGridTextColumn Binding="{Binding FirstName}" Header="First Name" />
<data:DataGridTextColumn Binding="{Binding LastName}" Header="Last Name" />
<data:DataGridTextColumn Binding="{Binding Address}" Header="Address" />
<data:DataGridTextColumn Binding="{Binding City}" Header="City" />
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
</UserControl>
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="AspDotNetCodesOnline.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot"> <data:DataGrid x:Name="dgSilverligh" AutoGenerateColumns="false" Width="450" Height="200" RowDetailsVisibilityMode="VisibleWhenSelected" > <data:DataGrid.RowDetailsTemplate> <DataTemplate > <TextBlock Text="Row details go here"></TextBlock> </DataTemplate> </data:DataGrid.RowDetailsTemplate> <data:DataGrid.Columns> <data:DataGridTextColumn Binding="{Binding Member_id}" Header="ID" ></data:DataGridTextColumn> <data:DataGridTextColumn Binding="{Binding FirstName}" Header="First Name" /> <data:DataGridTextColumn Binding="{Binding LastName}" Header="Last Name" /> <data:DataGridTextColumn Binding="{Binding Address}" Header="Address" /> <data:DataGridTextColumn Binding="{Binding City}" Header="City" /> </data:DataGrid.Columns> </data:DataGrid> </Grid> </UserControl> |
I Used the below 3 contracts,
Select:
public List<Emp> GetEmps()
{
DataClassesDataContext db = new DataClassesDataContext();
var members = from member in db.Emps
select member;
//return list of member objects
return members.ToList();
}
Update:
public bool UpdateEmp(Emp objMem)
{
DataClassesDataContext db = new DataClassesDataContext();
db.Log = new Vandermotten.Diagnostics.DebuggerWriter();
db.Emps.Attach(objMem, true);
db.SubmitChanges();
return true;
}
Delete:
public bool DeleteEmp(Emp objMem)
{
DataClassesDataContext db = new DataClassesDataContext();
var mem = db.Emps.First(m => m.Empid == objMem.Empid);
db.Emps.DeleteOnSubmit(mem);
db.SubmitChanges();
return true;
}
public List<Emp> GetEmps() { DataClassesDataContext db = new DataClassesDataContext(); var members = from member in db.Emps select member; //return list of member objects return members.ToList(); } Update: public bool UpdateEmp(Emp objMem) { DataClassesDataContext db = new DataClassesDataContext(); db.Log = new Vandermotten.Diagnostics.DebuggerWriter(); db.Emps.Attach(objMem, true); db.SubmitChanges(); return true; } Delete: public bool DeleteEmp(Emp objMem) { DataClassesDataContext db = new DataClassesDataContext(); var mem = db.Emps.First(m => m.Empid == objMem.Empid); db.Emps.DeleteOnSubmit(mem); db.SubmitChanges(); return true; } |
In Silverlight UserControl Page,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using AspDotNetCodesOnline.EmpService;
namespace AspDotNetCodesOnline
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
dgSilverligh.BeginningEdit += new EventHandler<DataGridBeginningEditEventArgs>(dgSilverlight_BeginningEdit);
dgSilverligh.RowEditEnded += new EventHandler<DataGridRowEditEndedEventArgs>(dgSilverlight_RowEditEnded);
this.KeyDown += new KeyEventHandler(OnKeyDown);
BindToGrid();
}
void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete && dgSilverligh.SelectedItem != null)
{
EmpService.Emp objEmp = dgSilverligh.SelectedItem as EmpService.Emp;
EmpService.DataServiceClient webService = new EmpService.DataServiceClient();
webService.DeleteEmpCompleted += new EventHandler<DeleteEmpCompletedEventArgs>(DeleteEmpCompleted);
webService.DeleteEmpAsync(objEmp);
}
}
//This method will be called when GetEmps asynchronous call will be completed
protected void DeleteEmpCompleted(object sender, DeleteEmpCompletedEventArgs e)
{
bool flag = Convert.ToBoolean(e.Result);
if (flag)
{
//delete success;
//refresh datagrid
BindToGrid();
}
}
private void BindToGrid()
{
DataServiceClient webService = new DataServiceClient();
webService.GetEmpsCompleted += new EventHandler<GetEmpsCompletedEventArgs>(GetEmpsCompleted);
//Now make asynchronous call
webService.GetEmpsAsync();
}
//This method will be called when GetEmps asynchronous call will be completed
protected void GetEmpsCompleted(object sender, GetEmpsCompletedEventArgs e)
{
//Bind result to Silverlight Datagrid
dgSilverligh.ItemsSource = e.Result;
}
void dgSilverlight_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e)
{
//Row has been updated. Call WCF Service to update into database
EmpService.Emp objEmp = e.Row.DataContext as EmpService.Emp;
EmpService.DataServiceClient webService = new DataServiceClient();
webService.UpdateEmpCompleted += new EventHandler<UpdateEmpCompletedEventArgs>(UpdateEmpCompleted);
webService.UpdateEmpAsync(objEmp);
}
protected void UpdateEmpCompleted(object sender, UpdateEmpCompletedEventArgs e)
{
bool result = Convert.ToBoolean(e.Result);
if (result)
{
//Update Success;
}
}
void dgSilverlight_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
//Beginning of row editing
//Don't need this event in our sample code
}
}
public class Emp
{
public Emp(int Emp_id, string firstName, string lastName, string address, string city)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Emp_id = Emp_id;
this.City = city;
this.Address = address;
}
public int Emp_id
{
get;
set;
}
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public string Address
{
get;
set;
}
public string City
{
get;
set;
}
}
}
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using AspDotNetCodesOnline.EmpService; namespace AspDotNetCodesOnline { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); dgSilverligh.BeginningEdit += new EventHandler<DataGridBeginningEditEventArgs>(dgSilverlight_BeginningEdit); dgSilverligh.RowEditEnded += new EventHandler<DataGridRowEditEndedEventArgs>(dgSilverlight_RowEditEnded); this.KeyDown += new KeyEventHandler(OnKeyDown); BindToGrid(); } void OnKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Delete && dgSilverligh.SelectedItem != null) { EmpService.Emp objEmp = dgSilverligh.SelectedItem as EmpService.Emp; EmpService.DataServiceClient webService = new EmpService.DataServiceClient(); webService.DeleteEmpCompleted += new EventHandler<DeleteEmpCompletedEventArgs>(DeleteEmpCompleted); webService.DeleteEmpAsync(objEmp); } } //This method will be called when GetEmps asynchronous call will be completed protected void DeleteEmpCompleted(object sender, DeleteEmpCompletedEventArgs e) { bool flag = Convert.ToBoolean(e.Result); if (flag) { //delete success; //refresh datagrid BindToGrid(); } } private void BindToGrid() { DataServiceClient webService = new DataServiceClient(); webService.GetEmpsCompleted += new EventHandler<GetEmpsCompletedEventArgs>(GetEmpsCompleted); //Now make asynchronous call webService.GetEmpsAsync(); } //This method will be called when GetEmps asynchronous call will be completed protected void GetEmpsCompleted(object sender, GetEmpsCompletedEventArgs e) { //Bind result to Silverlight Datagrid dgSilverligh.ItemsSource = e.Result; } void dgSilverlight_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e) { //Row has been updated. Call WCF Service to update into database EmpService.Emp objEmp = e.Row.DataContext as EmpService.Emp; EmpService.DataServiceClient webService = new DataServiceClient(); webService.UpdateEmpCompleted += new EventHandler<UpdateEmpCompletedEventArgs>(UpdateEmpCompleted); webService.UpdateEmpAsync(objEmp); } protected void UpdateEmpCompleted(object sender, UpdateEmpCompletedEventArgs e) { bool result = Convert.ToBoolean(e.Result); if (result) { //Update Success; } } void dgSilverlight_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { //Beginning of row editing //Don't need this event in our sample code } } public class Emp { public Emp(int Emp_id, string firstName, string lastName, string address, string city) { this.FirstName = firstName; this.LastName = lastName; this.Emp_id = Emp_id; this.City = city; this.Address = address; } public int Emp_id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string City { get; set; } } } |
Conclusion:
Hope this helps,
Happy coding.
nice post. thanks.