ASP.net : DataList

  1. DataList: basis
  2. DataList: items selecteren en deselecteren
  3. Object Data Source hergebruiken met MasterPages
  4. DataList: items bewerken
  5. DataList: items toevoegen
  6. DataList: items verwijderen

DataList: basisbegrippen

De klassen gebruikt in dit hoofdstuk werden aangemaakt in het vorige hoofdstuk data binding en list controls.

Weergave van items in een DataList

Een DataList stelt je in staat gegevens op het scherm te brengen waarbij de standaardlayout een kolom is. Deze control biedt opties voor auto-opmaak: naast het aanmaken van de inhoud met behulp van templates kan je deze keer ook telkens een Style voor de Template opgeven.

Deze Control biedt ook ondersteuning voor het bewerken van elementen.

In Visual Studio kan je op een WYSIWYG-manier een DataList opmaken:

DataList: Items Selecteren en deselecteren

Items selecteren

Behalve de extra mogelijkheid om een Style voor de verschillende templates aan te geven zijn en de WYSIWYG-mogelijkheden van Visual Studio biedt een DataList nog extra mogelijkheden t.o.v. de Repeater. Je kan een mogelijkheid inbouwen om items te selecteren. Hiertoe onderneem je volgende extra stappen:

Voorbeeld: fietsroutes

ODS hergebruiken met Masterpages

In de voorgaande voorbeelden hebben we een aantal keer gebruik gemaakt van een Object Data Source: een Data Source waarbij we de gegevens manipuleren met behulp van onze eigen klassen.

Een ObjectDataSource maakt deel uit van de namespace System.Web.UI.WebControls

Om een ObjectDataSource te hergebruiken op verschillende pagina's kan je handig gebruik maken van MasterPages, in plaats van op elke pagina de ObjectDataSource opnieuw aan te maken.

DataList: gegevens editeren

Een DataList kan je ook gebruiken om gegevens uit de Datasource aan te passen.

Om realistischer te werken koppelen we onze Webapplicatie deze keer aan een database.
In volgende stapjes maak je een nieuwe SQL Server 2005 Express-database aan met Visual Studio 2005.
Werk je liever met SQL Server 2000 / 2005 open dat resp. Enterprise Manager / Management Studio, en maak een nieuwe database aan.

DataList: items toevoegen

  • Voorzie een Stored Procedure DrankInsert in Drank.mdf
    CREATE PROCEDURE dbo.DrankInsert
    (
    	@naam varchar(50),
    	@prijs float,
    	@id int output
    )
    AS
    	SET NOCOUNT OFF;
    INSERT INTO [drank] ([naam], [prijs]) VALUES (@naam, @prijs);
    	
    Set @id = SCOPE_IDENTITY()
    
    Deze Stored Procedure bevat een outputparameter met het id van het nieuwe drankje. Dit Id zullen we straks tonen in een Label op de Web Form.
  • Voorzie een methode DrankenInsert in de klasse DAL.DrankDB
    public static int DrankenInsert(string naam, float prijs)
    {
                SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DrankConn"].ConnectionString);
                SqlCommand myCommand = new SqlCommand("DrankInsert", myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.Parameters.Add(new SqlParameter("@naam", naam));
                myCommand.Parameters.Add(new SqlParameter("@prijs", prijs));
                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;
    }
    
  • Voorzie een methode DrankenInsert in de klasse Logic.Dranken in Drank.cs
    public static int DrankenInsert(string naam, float prijs)
    {
                return DrankDB.DrankenInsert(naam, prijs);
    }
    
  • Voorzie in een FooterTemplate voor de DataList DLdrank
    • Een TextBox: ID: TxtNaamNew - Width:50px
    • Een TextBox: ID: TxtPrijsNew - Width:50px
    • Een ImageButton: ImageUrl: new.jpg - CommandName: insert
  • Plaats een Label LblMsg onder de DataList, maak de eigenschap Text leeg
  • Voorzie volgende code in de Page_Load van de Web Form:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DLdrank.DataSource = Dranken.getDranken();
            DLdrank.DataBind();
        }
    
        LblMsg.Text = "";
    }
    
  • Voorzie volgende code in de EventHandler ItemCommand:
    protected void DLdrank_ItemCommand(object source, DataListCommandEventArgs e)
    {
       ...
    
        if (e.CommandName == "insert")
        {
            string naam = ((TextBox)e.Item.FindControl("TxtNaamNew")).Text;
            float prijs = Convert.ToSingle(((TextBox)e.Item.FindControl("TxtPrijsNew")).Text);
            DLdrank.SelectedIndex = -1;
            int id = Dranken.DrankenInsert(naam, prijs);
            DLdrank.DataSource = Dranken.GetDranken();
            DLdrank.DataBind();
    
            LblMsg.Text = "Drank toegevoegd met id " + id;
        }
    }
    

DataList: items verwijderen

  • Voorzie een Stored Procedure DrankDelete in Drank.mdf
    CREATE PROCEDURE dbo.DrankDelete
    (
    	@id int
    )
    AS
    	SET NOCOUNT OFF;
    DELETE FROM [drank] WHERE [id] = @id
    
  • Voorzie in de ItemTemplate en SelectedItemTemplate een ImageButton:
    • ImageUrl: images/delete.jpg
    • CommandName: delete
  • Voorzie een methode DrankenDelete in de klasse DAL.DrankDB
    public static void DrankenDelete(int id)
    {
                SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DrankConn"].ConnectionString);
                SqlCommand myCommand = new SqlCommand("DrankDelete", myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.Parameters.Add(new SqlParameter("@id", id));
    
                myConnection.Open();
                myCommand.ExecuteNonQuery();
                myConnection.Close();
    }
    
  • Voorzie een methode DrankenDelete in de klasse Logic.Dranken in Drank.cs
    ...
    public static void DrankenDelete(int id)
    {
                DrankDB.DrankenDelete(id);
    }
    ...
    
  • Voorzien een EventHandler voor DeleteCommand voor DLdrank:
    protected void DLdrank_DeleteCommand(object source, DataListCommandEventArgs e)
    {
        int id = Convert.ToInt32(DLdrank.DataKeys[e.Item.ItemIndex]);
        Dranken.DrankenDelete(id);
    
        DLdrank.DataSource = Dranken.GetDranken();
        DLdrank.DataBind();
    }
    

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb