Silverlight Datagrid add/delete operations and ObservableCollection
In my previous post,the collection I used is a List. So, each time I add a new item to the list, the itemsource of the datagrid need to be modified/reset to reflect the latest changes to the collection.
Using the ObservableCollection gets this functionality comes free of cost/extra code for us. The observable collection implements InotifyCollectioChanged which notifies the underlying control whenever anything has changed in the list.
Here is the page.xaml snippet
Here is the page.xaml.cs snippet
public partial class Page : UserControl
{
ObservableCollection<Customer> clist = new ObservableCollection<Customer>();
public Page()
{
InitializeComponent();
int count = 25;
for (int i = 0; i < count; i++)
{
Customer cust1 = new Customer("custfname" + i, "custlastname" + i, i, "address" + i, "city" + i, "country" + i);
clist.Add(cust1);
}
dg.ItemsSource = clist;
}
private void addbutton_Click(object sender, RoutedEventArgs e)
{
int count = clist.Count;
Customer cust1 = new Customer("custfname" + count, "custlastname" + count, count, "address" + count, "city" + count, "country" + count);
clist.Add(cust1);
dg.ScrollIntoView(clist[clist.Count-1], dg.Columns[5]);
}
private void deletebutton_Click(object sender, RoutedEventArgs e)
{
int deleteIndex = clist.Count - 1;
clist.RemoveAt(deleteIndex);
dg.ScrollIntoView(clist[clist.Count - 1], dg.Columns[5]);
}
}}
Thus, using the ObservableCollection helps us view in datagrid without any writing extra code the changes made to the underlying collection.
More about Silverlight ObservableCollection at https://msdn.microsoft.com/en-us/library/ms668604(VS.95).aspx
Comments
Anonymous
February 15, 2009
PingBack from http://asp-net-web-host.simplynetdev.com/silverlight-datagrid-adddelete-operations-and-observablecollection/Anonymous
January 19, 2010
The underlying control datagrid has no event to notify to inform that the new entry is now added. If i use our code-snippet, ScrollIntoView marks not the added item, because the control has not finished to adding by using the INotifyCollectionChanged. I hope a new version will fix it by publishing a new event ItemAdded or similar.