Content in DataListItems per Klick ein- bzw. ausblenden

Written on September 20, 2004

Bedingt durch ein Posting in der ASP.NET-Mailingliste habe ich ein wenig mit der ASP.NET DataList gespielt - Resultat ist die Möglichkeit, Inhalt in DataListItems per Mausklick ein- und auszublenden.

Zur Verdeutlichung rechts einige Screenshots. Dargestellt sind die Kunden aus der bekannten Northwind-Datenbank.

Der Code der .aspx-Datei:

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="BlogSamples.DataListItemInvisible._default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

default1


Kunden


<%# DataBinder.Eval(Container, "DataItem.CompanyName") %>



<%# DataBinder.Eval(Container, "DataItem.Address") %>


<%# DataBinder.Eval(Container, "DataItem.Country") %>







Der Code der .aspx.cs-Datei:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace BlogSamples.DataListItemInvisible
{
///
/// Zusammenfassung fr default.
///

public class _default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataList DataList1;

private void Page_Load(object sender, System.EventArgs e) {
if(!Page.IsPostBack)
{
// Datenbindung
DataList1.DataSource = this.ReadDataFromDB();
DataList1.DataKeyField = "CustomerID";
DataList1.DataBind();
}
}

// Daten aus der Northwind-DB lesen
private DataSet ReadDataFromDB() {
OleDbConnection MyNWConn =
new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../data/Nwind.mdb"));
DataSet MyDataSet = new DataSet();
OleDbDataAdapter oCommand = new OleDbDataAdapter();
OleDbCommand oledbcmd = new OleDbCommand();
oledbcmd.CommandType = CommandType.StoredProcedure;
oledbcmd.CommandText = "[SelectCustomers]";
oledbcmd.Connection = MyNWConn;
oCommand.SelectCommand = oledbcmd;
oCommand.Fill(MyDataSet,"Orders");
MyNWConn.Close();
return MyDataSet;
}

#region Vom Web Form-Designer generierter Code
override protected void OnInit(EventArgs e) {
//
// CODEGEN: Dieser Aufruf ist fr den ASP.NET Web Form-Designer erforderlich.
//
InitializeComponent();
base.OnInit(e);
}

///
/// Erforderliche Methode fr die Designeruntersttzung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor gendert werden.
///

private void InitializeComponent() {
this.Load += new System.EventHandler(this.Page_Load);
this.DataList1.ItemCommand += new DataListCommandEventHandler(DataList1_ItemCommand);
}
#endregion

//Auswertung des geklickten LinkButtons
private void DataList1_ItemCommand(object source, DataListCommandEventArgs e) {
if(e.CommandName == "show") {
((Label)e.Item.FindControl("lblAddress")).Visible = true;
((Label)e.Item.FindControl("lblCountry")).Visible = true;
((LinkButton)e.Item.Controls[1]).CommandName = "hide";

}
if(e.CommandName == "hide") {
((Label)e.Item.FindControl("lblAddress")).Visible = false;
((Label)e.Item.FindControl("lblCountry")).Visible = false;
((LinkButton)e.Item.FindControl("lbtShowHide")).CommandName = "show";
}
}
}
}

Zunächst die Liste vor dem Klick auf den Namen des Kunden:

Nach dem Klick auf den Namen des Kunden erscheinen die übrigen Daten:

Ein weiterer Klick auf den Namen lässt die erweiterten Informationen wieder verschwinden: