Introduction

This article provides an example of how to update a DataList in ASP.Net. This code example updates data using the Entity Framework. Updating data in a DataList is very easy in ASP.Net, I have used the Entity Framework to Insert, Update and Delete data from a DataList.

Background

For example, a DataList containing a Label, TextBox and Button as a template for displaying and raising events. The DataList in my page is as given below, to do this using the code Drag one DataList Control from a Toolbox and declare their ItemTemplate as given below.

HTML Code

  1. <p class=" "style="margin-bottom: 0.0001pt;"><asp:DataListID="DataList1" runat="server" width="100%"
  2. oncancelcommand="DataList1_CancelCommand" oneditcommand="DataList1_EditCommand"
  3. onitemcommand="DataList1_ItemCommand" onitemdatabound="DataList1_ItemDataBound"
  4. onupdatecommand="DataList1_UpdateCommand">
  5. <HeaderTemplate>
  6. <table width="100%">
  7. </HeaderTemplate>
  8. <ItemTemplate>
  9. <tr>
  10. <td style="width:30%">Address1:</td>
  11. <td><%#Eval("Address1")%></td>
  12. </tr>
  13. <tr>
  14. <td>Address2:</td>
  15. <td><%#Eval("Address2")%></td>
  16. </tr>
  17. <tr>
  18. <td style="width:30%">City:</td>
  19. <td><%#Eval("City")%></td>
  20. </tr>
  21. <tr>
  22. <td>State:</td>
  23. <td><%#Eval("State")%></td>
  24. </tr>
  25. <tr>
  26. <td>Pin Code:</td>
  27. <td><%#Eval("PIN")%></td>
  28. </tr>
  29. <tr>
  30. <td>
  31. </td>
  32. <td><asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">Edit</asp:LinkButton></td>
  33. </tr>
  34. </ItemTemplate>
  35. <EditItemTemplate>
  36. <tr>
  37. <td style="width:10%">Address1:</td>
  38. <td><asp:TextBox ID="txtAdd1" runat="server" Width="200px" Text='<%#Eval("Address1") %>'></asp:TextBox></td>
  39. </tr>
  40. <tr>
  41. <td>Address2:</td>
  42. <td><asp:TextBox ID="txtAdd2" runat="server" Width="200px" Text='<%#Eval("Address2") %>'></asp:TextBox></td>
  43. </tr>
  44. <tr>
  45. <td style="width:30%">City:</td>
  46. <td><asp:TextBox ID="txtCity" runat="server" Width="200px" Text='<%#Eval("City") %>'></asp:TextBox></td>
  47. </tr>
  48. <tr>
  49. <td>State:</td>
  50. <td><asp:TextBox ID="txtState" runat="server" Width="200px" Text='<%#Eval("State") %>'></asp:TextBox></td>
  51. </tr>
  52. <tr>
  53. <td>Pin Code:</td>
  54. <td><asp:TextBox ID="txtPin" runat="server" Text='<%#Eval("PIN") %>'></asp:TextBox>
  55. <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
  56. ErrorMessage="Invalide Pin" ControlToValidate="txtPin"
  57. ValidationExpression="\d{6}">*</asp:RegularExpressionValidator>
  58. </td>
  59. </tr>
  60. <tr>
  61. <td>
  62. </td>
  63. <td><asp:Button ID="btnsave" runat="server" Text="Update" EnableViewState="False"
  64. Font-Italic="True" CommandName="Update"></asp:Button>
  65. <asp:Button ID="btncancel" runat="server" Text="Cancel" EnableViewState="False" Font-Italic="True" CommandName="Cancel"></asp:Button>
  66. </td>
  67. </tr>
  68. </EditItemTemplate>
  69. <FooterTemplate>
  70. </table>
  71. </FooterTemplate>
  72. </asp:DataList>
On the page load event bind your DataList with the database. I have used the Entity Framework to bind to the database as in the following:

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. {
  5. if (Request.QueryString["id"] == null)
  6. {
  7. using (OCSEntities ocs = new OCSEntities())
  8. {
  9. ocs.Connection.Open();
  10. DataList1.DataSource = ocs.Addresses.Where(item => item.UID == SessionManager.Current.CurrentUser.ID).ToList();
  11. DataList1.DataBind();
  12. }
  13. }
  14. else
  15. {
  16. DataList1.Visible = false;
  17. pnlnew.Visible = true;
  18. }
  19. }
  20. }

Use an ItemCommand Event to specify the Edit item index of the DataList.

For example:

  1. protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
  2. {
  3. if (e.CommandName == "Edit")
  4. {
  5. DataList1.EditItemIndex = 0;
  6. }
  7. }

Again, rebind your DataList to a database table in the editcommand event of the DataList control:

  1. protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
  2. {
  3. //DataList1.EditItemIndex = 0;
  4. using (OCSEntities ocs = new OCSEntities())
  5. {
  6. ocs.Connection.Open();
  7. DataList1.DataSource = ocs.Addresses.Where(item => item.UID == SessionManager.Current.CurrentUser.ID).ToList();
  8. DataList1.DataBind();
  9. }
  10. }

Use the updatecommand event to update your database as in the following:

  1. protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
  2. {
  3. if (e.Item.ItemType == ListItemType.EditItem)
  4. {
  5. using (OCSEntities ocs = new OCSEntities())
  6. {
  7. ocs.Connection.Open();
  8. OCSModel.Address ad = ocs.Addresses.Where(item => item.UID == SessionManager.Current.CurrentUser.ID).First();
  9. ad.Address1 = ((TextBox)e.Item.FindControl("txtAdd1")).Text;
  10. ad.Address2 = ((TextBox)e.Item.FindControl("txtAdd2")).Text;
  11. ad.City = ((TextBox)e.Item.FindControl("txtCity")).Text;
  12. ad.State = ((TextBox)e.Item.FindControl("txtState")).Text;
  13. ad.PIN = ((TextBox)e.Item.FindControl("txtPin")).Text;
  14. ocs.SaveChanges();
  15. ocs.AcceptAllChanges();
  16. }
  17. DataList1.EditItemIndex = -1;
  18. using (OCSEntities ocs = new OCSEntities())
  19. {
  20. ocs.Connection.Open();
  21. DataList1.DataSource = ocs.Addresses.Where(item => item.UID == SessionManager.Current.CurrentUser.ID).ToList();
  22. DataList1.DataBind();
  23. }
  24. }
  25. }

Summary

In the preceding example, we demonstrated how to use a template in the DataList box and update the database using the Entity Framework.