DataList数据控件嵌套显示主从关系数据
下面发表一篇有关DataList数据控件嵌套方法的文章,是一位博友(网名:海角)比较详细地整理并分享给我,然后发表到我的博客上,其中原文大部分未改动,仅做了小许修改及注释。
DataList数据控件数据为列表形式显示,而并不能好的以层级、主次关系呈现出来,故我们可以想到利用数据控件嵌套,来实现这种效果,下面是一个从表结构到页面的完整实例:
实例名称:会员及该会员拥有产品的数据列表显示
1、数据表设计
在指定数据库下建立两张表,这里在Company数据下建立用户表(UserInfo为主表),产品表(ProductInfo为从表)。
UserInfo表:
字段 | 数据类型 | 说明 |
UserID | Int | 会员编号,主键,自动增加 |
UserName | nvarchar(32) | 会员名 |
ProductInfo表:
字段 | 数据类型 | 说明 |
ProductID | nvarchar(32) | 产品ID,主键,自动增加 |
UserID | Int | 会员编号 |
ProductName | nvarchar(128) | 产品名称 |
2、页面源代码
Default.aspx文件关键位置代码:
<!–大类–>
<!–主DataList中的OnItemDataBound是该实例的关键–>
<asp:DataList ID="DataListZhu" runat="server" DataKeyField="UserID" OnItemDataBound="DataListZhu_ItemDataBound">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "UserName")%><hr />
<!–小类–>
<asp:DataList ID="DataListCong" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ProductName")%>
</
</asp:DataList>
</ItemTemplate>
</asp:DataList>
Default.aspx.cs文件关键位置代码:
//构建数据库连接,SQL语句,创建参数,这里是使用的本地数据,数据库连接用户名为sa,密码为空
string strConnect = "Persist Security Info=False;User ID=sa;Password=;Initial Catalog=Company;Server=(local);"; //连接数据库
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//加载页面显示主DataList数据
SqlConnection objConnection = new SqlConnection(strConnect);
string strCmd = "select dbo.UserInfo.UserID, dbo.UserInfo.UserName from dbo.UserInfo "; //提取用户数据信息
SqlCommand objCommand = new SqlCommand(strCmd,objConnection);
SqlDataAdapter objDataAdapter = new SqlDataAdapter(objCommand);
DataSet objDataSet = new DataSet();
objDataAdapter.Fill(objDataSet,"UserInfo");
DataListZhu.DataSource = objDataSet; //将数据绑定至DataListZhu数据控件
DataListZhu.DataBind();
}
}
//下方为主从数据绑定关键,根据DataListZhu数据控件中UserID进行产品列表的绑定
protected void DataListZhu_ItemDataBound(object sender, DataListItemEventArgs e)
{
string UserID = this.DataListZhu.DataKeys[e.Item.ItemIndex].ToString();
SqlConnection objConnection = new SqlConnection(strConnect);
SqlCommand objCommandC = new SqlCommand(string.Format("SELECT left([ProductName],20) as [ProductName], [ProductID] FROM [ProductInfo] WHERE [UserID]=’{0}’ ", UserID), objConnection);
SqlDataAdapter objDataAdapterC = new SqlDataAdapter(objCommandC);
DataSet objDataSetC = new DataSet();
objDataAdapterC.Fill(objDataSetC, "ProductInfo");
DataList DataListCong = (DataList)e.Item.FindControl("DataListCong");
DataListCong.DataSource = objDataSetC;
DataListCong.DataBind();
}
3、效果如下
张三
________________________________________
产品名称1
产品名称2
李四
________________________________________
产品名称1
产品名称2
点评总结:上面是一个很简单的嵌套实例,实例很完整,一目了然,主要通过OnItemDataBound事件对子数据控件进行数据绑定,此种方法亦可在repeater与detailsview控件实现嵌套绑定。另外还有一种方法,是通过数据集的relations属性进行两数据控件关联绑定,想了解的童鞋,请 点击查看 ,最后再次感谢博友海角提供文章分享。
本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:DataList数据控件嵌套显示主从关系数据