Sinds .Net 3.0 maakt Ajax standaard deel uit van de ASP.Net-toolset.
ASP.NET Ajax bestaat uit een server-side library zodat de ASP.Net Web Controls Ajax functionaliteit verkrijgen, en een client-side scriptlibrary die de nodig Javascript-code koppelt aan de Ajax-controls.
ASP.NET AJAX bij MSDN.
Plaats vanuit Tab Ajax Extensions in de Toolbox een ScriptManager Component op de pagina.
Deze component regelt de AJAX-functionaliteit van de pagina:
protected void BtnVerander_Click(object sender, EventArgs e)
{
LblTekst.Text = "Tekst aangepast door CallBack!";
}
Standaard verkrijgt elke component die zich in een UpdatePanel bevindt Ajax-functionaliteit. Met behulp van Triggers kan je ervoor zorgen dat de inhoud van een UpdatePanel vernieuwd wordt door een control gelegen buiten het UpdatePanel.
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnTijd_Click(object sender, EventArgs e)
{
LblTijd.Text = System.DateTime.Now.ToString();
}
De component UpdateProgress kan de gebruiker op de hoogte stellen dat een CallBack aan de gang is.
protected void BtnTijd_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
LblTijd.Text = System.DateTime.Now.ToString();
}
Je begrijpt dat het artificiëel toevoegen van een wachttijd enkel als voorbeeld dient, en dat je dit niet in een echte toepassing moet gebruiken :)
In de eigenschap DisplayAfter van de UpdateProgress kan je aangeven hoeveel milliseconden er wordt gewacht op de control te tonen. Op die manier kan je ervoor zorgen dat voor snelle acties de control niet voortdurend flikkert.
Meer over UpdateProgress
Een Timer control kan je gebuiken als Trigger van een UpdatePanel. De Timer zorgt ervoor dat een update gebeurt volgens een tijdsinterval.
public partial class Updatepanel : System.Web.UI.Page
{
private ArrayList berichten;
protected void Page_Load(object sender, EventArgs e)
{
LblTijd.Text = System.DateTime.Now.ToString();
if (ViewState["berichten"] == null)
{
berichten = new ArrayList();
berichten.Add("Het is mooi weer vandaag");
berichten.Add("Tussen kerst en nieuw zit een volledige week");
berichten.Add("Het is weer bijna pasen");
berichten.Add("Ja ja, het leven is lastig...");
ViewState["berichten"] = berichten;
ViewState["nr"] = 0;
LblBericht.Text = berichten[0].ToString();
}
}
protected void Timer1_Tick(object sender, EventArgs e)
{
berichten = (ArrayList)ViewState["berichten"];
int nr = Convert.ToInt32(ViewState["nr"]);
nr++;
if (nr == berichten.Count) nr = 0;
LblBericht.Text = berichten[nr].ToString();
ViewState["nr"] = nr.ToString();
}
}
Een overzicht vind je op de site van de Ajax Control Toolkit
CREATE PROCEDURE dbo.WerknemerSelect AS SELECT id, voornaam, naam FROM Werknemer RETURN GO CREATE PROCEDURE dbo.WerknemerUpdate ( @id int, @voornaam varchar(50), @naam varchar(50) ) AS UPDATE Werknemer SET voornaam= @voornaam, naam = @naam WHERE id = @id RETURN GO CREATE PROCEDURE dbo.WerknemerInsert ( @voornaam varchar(50), @naam varchar(50), @id int output ) AS INSERT INTO Werknemer (voornaam, naam) VALUES (@voornaam, @naam) SET @id = SCOPE_IDENTITY() RETURN GO CREATE PROCEDURE dbo.WerknemerDelete ( @id int ) AS DELETE FROM Werknemer where id = @id RETURN
<configuration> <configSections> ... </configSections> <connectionStrings> <add name="VerkoopConn" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Verkoop.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"/> </connectionStrings> ...
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
public class WerknemerDB
{
public static DataSet GetWerknemers()
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["VerkoopConn"].ConnectionString);
SqlCommand myCommand = new SqlCommand("WerknemerSelect", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet("DsWerknemer");
da.Fill(ds, "Werknemers");
return ds;
}
public static void Update(int id, string voornaam, string naam)
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["VerkoopConn"].ConnectionString);
SqlCommand myCommand = new SqlCommand("WerknemerUpdate", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@id",id.ToString());
myCommand.Parameters.AddWithValue("@voornaam", voornaam);
myCommand.Parameters.AddWithValue("@naam", naam);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
public static int Insert(string voornaam, string naam)
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["VerkoopConn"].ConnectionString);
SqlCommand myCommand = new SqlCommand("WerknemerInsert", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@voornaam", voornaam));
myCommand.Parameters.Add(new SqlParameter("@naam", naam));
SqlParameter pid = new SqlParameter("@id", SqlDbType.Int);
pid.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(pid);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
int id = Convert.ToInt32(pid.Value);
return id;
}
public static void Delete(int id)
{
SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["VerkoopConn"].ConnectionString);
SqlCommand myCommand = new SqlCommand("WerknemerDelete", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@id", id));
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.ComponentModel;
using DAL;
namespace Logic
{
[DataObject]
public class Werknemer
{
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private string voornaam;
public string Voornaam
{
get { return voornaam; }
set { voornaam = value; }
}
private string naam;
public string Naam
{
get { return naam; }
set { naam = value; }
}
public Werknemer()
{
}
public Werknemer(int id, string voornaam, string naam)
{
Id = id;
Voornaam = voornaam;
Naam = naam;
}
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<Werknemer> GetWerknemers()
{
DataSet ds = WerknemerDB.GetWerknemers();
DataTable dt = ds.Tables["Werknemers"];
List<Werknemer> wcol = new List<Werknemer>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Werknemer w = new Werknemer();
w.Id = Convert.ToInt32(dt.Rows[i]["id"]);
w.Voornaam = dt.Rows[i]["Voornaam"].ToString();
w.Naam = dt.Rows[i]["Naam"].ToString();
wcol.Add(w);
}
return wcol;
}
[DataObjectMethod(DataObjectMethodType.Update)]
public static void Update(Werknemer w)
{
WerknemerDB.Update(w.Id, w.Voornaam, w.Naam);
}
[DataObjectMethod(DataObjectMethodType.Delete)]
public static void Delete(Werknemer w)
{
WerknemerDB.Delete(w.Id);
}
[DataObjectMethod(DataObjectMethodType.Insert)]
public static int Insert(Werknemer w)
{
return WerknemerDB.Insert(w.Voornaam, w.Naam);
}
}
}
Meer over aanpassen van GridView in de Cursus ASP.Net, we gaan hier niet verder in op de soorten kolommen, sortering, paginering, ...
...
using Logic;
public partial class Ajax_Werknemers : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
LblBericht.Text = "";
}
protected void BtnToevoegen_Click(object sender, EventArgs e)
{
Werknemer w = new Werknemer();
w.Voornaam = TxtVoornaam.Text;
w.Naam = TxtNaam.Text;
int nieuwid = Werknemers.Insert(w);
LblBericht.Text = "Nieuwe werknemer ingevoegd met id: " + nieuwid.ToString();
GVWerknemer.DataBind();
}
}
Wij gaan nog een stap verder en gebruiken de ValidatorCalloutExtender uit de AJAX ControlToolKit
Om dit te doen voor de GridView in Editmodus zal je moeten werken met EditItemTemplate kolommen, zie cursus ASP.Net.
| Meer tutorials: |
| leer ook: | html | | xhtml | | css | | asp | | asp.net | | c# | | ado.net | | linq | | ajax | | java | | javascript |