SIGN UP MEMBER LOGIN:    
ARTICLE

Show/Delete/Edit data in WPF DataGrid using LINQ to SQL Classes

Posted by Raj Kumar Articles | WPF with C# October 29, 2009
This article will demonstrates how to Show, Delete, and Edit data in WPF Data Grid using LINQ to SQL Data Classes.
Reader Level:
Download Files:
 

This article will demonstrates how to Show, Delete, and Edit data in WPF Data Grid using LINQ to SQL Data Classes. What is LINQ to SQL?? When you want to use Language-Integrated Query (LINQ) to access data in a database, you do not connect directly to the database. Instead, you create classes that represent the database and its tables, and use those classes to interact with data. You can generate the classes through the Object Relational Designer or by running the SqlMetal.exe utility. For more information, see Object Relational Designer (O/R Designer) and Code Generation Tool (SqlMetal.exe).

SO Let's start first of all add a new item LINQ to SQL data Classes.

1.JPG

Figure 1.

Now drag and drop database table using server explorer.


2.JPG

Figure 2.


If you are using Visual studio 2008 then you need to add a reference of WPF Toolkit, you don't need to add this reference in visual studio 2010.


3.JPG

Figure 3.

Add wpf toolkit name space on your .xaml page or window whatever you using.

  xmlns:grid=http://schemas.microsoft.com/wpf/2008/toolkit

This is my DataGrid.

<Grid>

        <grid:DataGrid x:Name="MyDataGrid" x:Uid="MyDataGrid" AutoGenerateColumns="False"

                       AlternationCount="2" SelectionMode="Single" Margin="0,31,0,0">           

            <grid:DataGrid.Columns>

                <grid:DataGridTextColumn Binding="{Binding  Path=CustomerID}" IsReadOnly="True"

                                    Header="Customer ID" Width="SizeToHeader" />

                <grid:DataGridTextColumn Binding="{Binding Path=CompanyName}"

                                    Header="Company" Width="SizeToHeader" />

                <grid:DataGridTextColumn Binding="{Binding Path=ContactName}"

                                    Header="Name" Width="SizeToHeader" />

                <grid:DataGridTextColumn Binding="{Binding Path=City}"

                                    Header="City" Width="SizeToHeader" />

                <grid:DataGridTextColumn Binding="{Binding Path=Country}"

                                    Header="Country" Width="SizeToHeader" />

                <grid:DataGridTextColumn Binding="{Binding Path=Phone}"

                                    Header="Phone" Width="SizeToHeader" />

                <grid:DataGridTemplateColumn Header="Edit Row">

                    <grid:DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button Content="Edit" Click="EditButton_Click" />

                        </DataTemplate>

                    </grid:DataGridTemplateColumn.CellTemplate>

                </grid:DataGridTemplateColumn>

                <grid:DataGridTemplateColumn Header="Delete Row">

                    <grid:DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <Button Content="Delete" Click="DeleteButton_Click" />

                        </DataTemplate>

                    </grid:DataGridTemplateColumn.CellTemplate>

                </grid:DataGridTemplateColumn>

            </grid:DataGrid.Columns>

        </grid:DataGrid>

        <Button Height="23" Margin="12,2,0,0" Name="LoadButton" Content="Load Customers" VerticalAlignment="Top" Click="LoadButton_Click" HorizontalAlignment="Left" Width="126"></Button>

    </Grid>

.XAML.CS

private void LoadButton_Click(object sender, RoutedEventArgs e)

        {           

                LoadCustomers();                       

        }

 

private void LoadCustomers()

        {

           

            CustomersDataContext cd = new CustomersDataContext();

            var customers = (from p in cd.Customers

                             select p).Take(10);

            MyDataGrid.ItemsSource = customers;

            LoadButton.Content = "Customers Loaded";

        }

Now run your application, you will see output like this. When you click on Load Customers button your data will display in datagrid.

4.JPG

Figure 4. 

5.JPG 


Figure 5. 

private void EditButton_Click(object sender, RoutedEventArgs e)

        {

            try

            {

                CustomersDataContext dataContext = new CustomersDataContext();

                Customer customerRow = MyDataGrid.SelectedItem as Customer;

                string m = customerRow.CustomerID;

                Customer customer = (from p in dataContext.Customers

                                     where p.CustomerID == customerRow.CustomerID

                                     select p).Single();

                customer.CompanyName = customerRow.CompanyName;

                customer.ContactName = customerRow.ContactName;

                customer.Country = customerRow.Country;

                customer.City = customerRow.City;

                customer.Phone = customerRow.Phone;

                dataContext.SubmitChanges();

                MessageBox.Show("Row Updated Successfully.");

                LoadCustomers();

            }

            catch (Exception Ex)

            {

                MessageBox.Show(Ex.Message);

                return;

            }

 

 6.JPG

Figure 6.  

 

private void DeleteButton_Click(object sender, RoutedEventArgs e)

        {          

            CustomersDataContext cd = new CustomersDataContext();

            Customer customerRow = MyDataGrid.SelectedItem as Customer;

            var customer = (from p in cd.Customers

                            where p.CustomerID == customerRow.CustomerID

                            select p).Single();

            cd.Customers.DeleteOnSubmit(customer);

            cd.SubmitChanges();

            MessageBox.Show("Row Deleted Successfully.");

            LoadCustomers();

        }     

7.JPG 

Figure 7.

Login to add your contents and source code to this article
share this article :
post comment
 

Hi, Thx for sharing this demo. Please let me know, I can i do it using MVVM Thx.

Posted by Pushkar Gupta Mar 28, 2012

Hello, Raj Kumar!! I have run of your project but your editing option is not working at all. I tried doing a different one by seeing of your code but It doesn't work with Edit with save part. If you do run and get the same problem then please update your article one.

Posted by Indranil Sarkar Mar 21, 2012

good Example

Posted by Paras Paras Mar 20, 2012

Code throws Object not referenced to an instance of an object at the edit button function: line with var

Posted by marius muntean Nov 17, 2011

At last a decent article on how to use the datagrid and commit changes back to a database table.

Posted by C B Jul 13, 2011
Team Foundation Server Hosting
Become a Sponsor
PREMIUM SPONSORS
  • ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications. Visit DynamicPDF here
    Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Team Foundation Server Hosting
Become a Sponsor