日志文章

2007年08月24日 14:52:09

嵌套DataList实现主细表


webform1.aspx

---------------------------------------------------------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication3.WebForm1" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
  <asp:DataList id="DataList1" runat="server" Width="80px">
  <ItemTemplate>
  <asp:Label ID="labname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"name")%>'></asp:Label>
 
  <asp:DataList id="DataList2" runat="server" RepeatDirection="Horizontal" RepeatColumns="5">
    <ItemTemplate>
      <asp:Label ID="Label1" Width="50px" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"name")%>'></asp:Label>
   
    </ItemTemplate>
  </asp:DataList>
  </ItemTemplate>
  </asp:DataList>
</form>
</body>
</HTML>
------------------------------------------------------------------




webForm1.aspx.cs

-------------------------------------------------------------------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace WebApplication3
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataList DataList1;

private void Page_Load(object sender, System.EventArgs e)
{
  // 在此处放置用户代码以初始化页面

  SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
  SqlDataAdapter da=new SqlDataAdapter("select [name] from category",con);
  DataSet ds=new DataSet();
  da.Fill(ds);
  this.DataList1.DataSource=ds;
  this.DataList1.DataBind();  
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
  //
  // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
  //
  InitializeComponent();
  base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{  
  this.DataList1.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.DataList1_ItemDataBound);
  this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
  {
  DataList dist=(DataList)e.Item.FindControl("DataList2");
  Label lab=(Label)e.Item.FindControl("labname");
  SqlConnection con=new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
  SqlDataAdapter da=new SqlDataAdapter("select [name] from detail where rid=(select id from catory where name='"+lab.Text+"')",con);
  DataSet ds=new DataSet();
  da.Fill(ds);
  dist.DataSource=ds;
  dist.DataBind();
  }
}
}
}
------------------------------------------------------

注:要运行以上测试代码需要在pubs数据库建立两张表,主表category 只有两列,id,name;
子表detail ,有三列,id,name,rid;其中rid为引用主表的外键。然后录入测试数据。

运行结果如下:

  数码
      电脑   手机
  汽车
      宝马

具体显示格式,可以通过订制DataList模板来实现

Tags: DataList   嵌套   主细表  

类别: DotNet |  评论(0) |  浏览(2375) |  收藏
发表评论