login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > .NET > C#.NET > DataGrid - Gegevens wijzigen

DataGrid - Gegevens wijzigen

Auteur: Abbas - 14 juni 2007 - 23:44 - Gekeurd door: Stijn - Hits: 3465 - Aantal punten: 4.75 (2 stemmen)




In mijn vorig script werd getoond hoe je op een eenvouige manier gegevens kon toevoegen. Deze gegevens werden getoond via de DataGrid en konden vanuit de DataGrid verwijderd worden uit de database. Het is altijd mogelijk dat er bij de invoer een fout gemaakt werd. Het is dan omslachtig om dit recorde te verwijderen en opnieuw in te voeren. Dit script toont ook weer op een eenvoudige manier hoe je gegevens in de database kan wijzigen via de DataGrid.

De SQL-database is eenvoudig (Database.mdf):
Tabel: "leden"
- id (int, primary key)
- voornaam (varchar(50))
- achternaam (varchar(50))

Hopelijk is alles duidelijk, als er vragen/opmerkingen zijn laat je dat maar weten. Voor de mensen die kunnen: stemmen alstublieft, zo weet ik of het goed is!

PS: er is een soort van "voorbeeld" te bekijken via de link onderaan. Het zijn screenshots met wat uitleg, maar binnenkort kan je het zelf uitproberen!

Code:
index.aspx

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="_Default" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7. <title>.: titjes :. | DataGrid - EditColumn</title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div align="center">
  12. <asp:Label ID="titel" Font-Underline="true" Font-Bold="true" runat="server" Text="DataGrid - EditColumn" />
  13. <br /><br /><br />
  14. <asp:DataGrid ID="grid_een" runat="server" OnCancelCommand="annuleer_Click" OnEditCommand="wijzig_Click" OnUpdateCommand="update_Click" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3">
  15. <Columns>
  16. <asp:EditCommandColumn EditText="Wijzig" CancelText="Annuleer" UpdateText="Bevestig" HeaderText="Actie" />
  17. <asp:BoundColumn HeaderText="ID" DataField="id" ReadOnly="true" />
  18. <asp:BoundColumn HeaderText="Voornaam" DataField="voornaam" />
  19. <asp:BoundColumn HeaderText="Achternaam" DataField="achternaam" />
  20. </Columns>
  21. <FooterStyle BackColor="White" ForeColor="#000066" />
  22. <SelectedItemStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
  23. <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" Mode="NumericPages" />
  24. <ItemStyle ForeColor="#000066" />
  25. <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
  26. </asp:DataGrid>
  27. <br /><br />
  28. <asp:Label ID="fouten" runat="server" />
  29. </div>
  30. </form>
  31. </body>
  32. </html>


index.aspx.cs

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Configuration;
  5. using System.Text;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Web.UI.HtmlControls;
  12.  
  13. public partial class _Default : System.Web.UI.Page
  14. {
  15. //Variabelen declareren
  16. //Let op: je laadt een extra library in: System.Text (nodig voor StringBuilder)
  17.  
  18. SqlConnection verbinding = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=H:\\C#\\DataGrid - EditColumn\\App_Data\\Database.mdf; Integrated Security=True; User Instance=True");
  19. SqlCommand commando;
  20. //"ds" en "da", afkortingen van de DataSet en DataAdapter, lijkt me wel duidelijk
  21. DataSet ds;
  22. SqlDataAdapter da;
  23. string query, id, voornaam, achternaam;
  24.  
  25. protected void Page_Load(object sender, EventArgs e)
  26. {
  27. //"!IsPostBack": als de pagina voor het eerst laadt, ga je naar "BindData()"
  28. //Deze functie staat onderaan in de code
  29. if (!IsPostBack)
  30. {
  31. BindData();
  32. }
  33. }
  34. protected void wijzig_Click(object sender, DataGridCommandEventArgs e)
  35. {
  36. //Met dit stukje maak je de geselecteerde rij wijzigbaar
  37. //Daarna ga je ook terug naar de functie "BindData()"
  38. grid_een.EditItemIndex = e.Item.ItemIndex;
  39. BindData();
  40. }
  41.  
  42. protected void annuleer_Click(object sender, DataGridCommandEventArgs e)
  43. {
  44. //Als je op "Annuleer" klikt ga ja terug naar de DataGrid, door de rij niet wijzigbaar te maken
  45. //Daarna erug die functie
  46. grid_een.EditItemIndex = -1;
  47. BindData();
  48. }
  49.  
  50. protected void update_Click(object sender, DataGridCommandEventArgs e)
  51. {
  52. //Dit is een groot stuk code, namelijk als je WEL wilt wijzigen
  53. //Je haalt het id, voornaam en naam uit de geselecteerde rij
  54. fouten.Text = "";
  55. id = e.Item.Cells[1].Text;
  56. voornaam = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
  57. achternaam = ((TextBox)e.Item.Cells[3].Controls[0]).Text;
  58. voornaam = Server.HtmlEncode(voornaam);
  59. achternaam = Server.HtmlEncode(achternaam);
  60.  
  61. //Controleren of de velden zijn ingevuld, anders foutmelding geven
  62. if (voornaam == string.Empty || achternaam == string.Empty)
  63. {
  64. fouten.Text = "Alle velden invullen";
  65. }
  66. else
  67. {
  68. //Je stelt een nieuw SqlCommand in en koppelt deze aan je SqlConnection
  69. commando = new SqlCommand();
  70. commando.Connection = verbinding;
  71.  
  72. //Je declareert een StringBuilder en voegt hier je SQL-query in
  73. //De "@" dient om parameters toe te voegen aan de SQL-query
  74. StringBuilder sql_query = new StringBuilder();
  75. sql_query.Append("UPDATE leden SET");
  76. sql_query.Append(" voornaam=@voornaam");
  77. sql_query.Append(", achternaam=@achternaam");
  78. sql_query.Append(" WHERE id=@id");
  79.  
  80. //De "CommandText" (opdracht) van het SqlCommand instellen op je SQL-query
  81. commando.CommandText = sql_query.ToString();
  82. //Hier ga je waards aan de parameters toekennen
  83. //Je voegt die parameters toe met het juiste kolom-type van in je DataBase
  84. commando.Parameters.Add("@voornaam", SqlDbType.VarChar, 50).Value = voornaam;
  85. commando.Parameters.Add("@achternaam", SqlDbType.VarChar, 50).Value = achternaam;
  86. commando.Parameters.Add("@id", SqlDbType.Int).Value = id;
  87.  
  88. //Je opent een try-catch-finally blok
  89. try
  90. {
  91. //Verbinding openen en je SqlCommand uitvoeren
  92. verbinding.Open();
  93. commando.ExecuteNonQuery();
  94. }
  95. catch (Exception x)
  96. {
  97. //Als er een fout is, deze opvangen en in een labeltje weergeven
  98. fouten.Text = x.Message;
  99. }
  100. finally
  101. {
  102. //Uiteindelijk de verbinding terug sluiten
  103. //Dit moet in het finally-blok, want als er iets mis gaat en de
  104. //"verbinding.Close()" staat in het try-blok, wordt de verbinding niet gesloten
  105. verbinding.Close();
  106. }
  107.  
  108. //De geselecteerde rij terug normaal maken door ze terug niet-wijzigbaar te maken
  109. //Weer naar de functie gaan
  110. grid_een.EditItemIndex = -1;
  111. fouten.Text = "Gegevens succesvol gewijzigd";
  112. BindData();
  113. }
  114. }
  115.  
  116. protected void BindData()
  117. {
  118. //Hier is dan eindelijk die functie
  119. //Je maakt een SQL-query en kent deze toe aan je SqlCommand, samen met je verbinding
  120. query = "SELECT id, voornaam, achternaam FROM leden";
  121. commando = new SqlCommand(query, verbinding);
  122. //Je maakt een nieuwe instantie van je DataAdapter met het SqlCommand als "opdracht"
  123. da = new SqlDataAdapter(commando);
  124. //Je maakt een nieuwe instantie van je DataSet
  125. ds = new DataSet();
  126. //Hier vul je je DataSet met wat de DataAdapter ophaalt
  127. da.Fill(ds);
  128.  
  129. //Je stelt de DataSource van je DataGrid in op je DataSet (die nu vol gegevens zit)
  130. grid_een.DataSource = ds;
  131. //En je bindt je je gegevens aan de DataGrid
  132. grid_een.DataBind();
  133. }
  134. }
Download code! Download code (.txt)

 Bekijk een voorbeeld van dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (4)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.025s