思归及各位大侠请指点,如何采用datalist来进行数据记录的横向显示
数据记录集形式如下字段1 字段2 字段3
data01 data02 data03
data11 data12 data13
......
现在我想使用datalist (.net 2.0) 数据控件来进行数据的绑定
要求显示格式如下
栏目名1 data01 data11 ....
栏目名2 data02 data12 ....
栏目名3 data03 data13 ....
具体显示结果示例可见这个连接: http://pdlib.pconline.com.cn/product/compare.do?method=compare&id=220898&id=220966&id=161496&id=221022
本来datalist带有 RepeatDirection="Horizontal" ,但是表头如何能纵向显示呢?
--------------------编程问答-------------------- dl1.RepeatDirection = RepeatDirection.Horizontal; //设为横显示
dl1.RepeatColumns = 12; //设置每行显示的数目 --------------------编程问答-------------------- dl1.RepeatDirection = RepeatDirection.Horizontal; --------------------编程问答-------------------- 请诸位看好我的问题再做答 --------------------编程问答-------------------- 在模板里面用table ul li然后CSS画好固定试试 --------------------编程问答-------------------- 在模板里面用table ul li然后CSS画好固定试试 --------------------编程问答-------------------- 貌似如此 --------------------编程问答-------------------- 两重循环搞定:
aspx:
--------------------编程问答--------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="rdlc.aspx.cs" Inherits="rdlc" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body onkeydown="return false;">
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server" Width="100%" RepeatColumns="2" RepeatDirection="Horizontal" BorderColor="#8080FF" BorderStyle="Solid" BorderWidth="1px" DataKeyField="DataID" OnItemDataBound="DataList1_ItemDataBound">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("DataValue") %>'></asp:Label>
</ItemTemplate>
<AlternatingItemTemplate>
<asp:DataList ID="DataList2" runat="server" RepeatColumns="10" RepeatDirection="Horizontal">
<ItemTemplate>
<%#Eval("GoodsName") %>
</ItemTemplate>
</asp:DataList>
</AlternatingItemTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>
支持 --------------------编程问答--------------------
--------------------编程问答-------------------- 感谢 phper2008 ,但是还是不符合我的要求,结果是出现了 这样的情况:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using wildrenerp;
public partial class rdlc : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.BindDatalist();
}
}
private void BindDatalist()
{
string sql = "select top 10 * from tBaseDataTree";//获得栏目表信息
DataSet ds = SqlDataProvider.GetResultBySql(sql);
this.DataList1.DataSource = ds;
this.DataList1.DataBind();
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
string sql = "select top 5 * from tGoods where GoodsTypeID='"+this.DataList1.DataKeys[e.Item.ItemIndex].ToString()+"'";//根据栏目主键取每个栏目对应的产品
DataSet ds = SqlDataProvider.GetResultBySql(sql);
DataList dl = (DataList)e.Item.FindControl("DataList2");
if (dl != null)
{
dl.DataSource = ds;
dl.DataBind();
}
}
/*注意,如果你的栏目和详细内容是一个表,也就是栏目为表字段,内容为字段下每条记录对应内容
则换一种写法,第一个datalist绑定数据表字段名称就可以了,一般栏目都是放在另一个表
欠套的datalist怎么布局,看你自己的了
*/
}
data01 data11 ....
栏目名1 data02 data12 ....
data03 data13 ....
data01 data11 ....
栏目名2 data02 data12 ....
data03 data13 ....
data01 data11 ....
栏目名3 data02 data12 ....
data03 data13 ....
--------------------编程问答-------------------- 栏目名1 data01 data11 ....
栏目名2 data02 data12 ....
栏目名3 data03 data13 ....
在数据库里处理成这样再绑定比较好吧 --------------------编程问答-------------------- 这样的法子就要对数据库进行多次读操作才行,好象有点傻哦 --------------------编程问答--------------------
asp:Repeater ID="Repeater1" runat="server">--------------------编程问答-------------------- 有两个办法:
<ItemTemplate>
<li>
<asp:Label id="label1" runat="server" Text='<%#Eval("title") %>'></asp:Label>
</li>
<ul>
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<asp:Label id="label2" runat="server" Text='<%#Eval("title") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
</ul>
</ItemTemplate>
</asp:Repeater>
1、在SQL语句中用这个TRANSFORM 可以直接得到一个横的表。
2. 生成一段html文本。
我一般是用第二种方法, 比较灵活。 --------------------编程问答--------------------
--------------------编程问答--------------------
<ul>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<li>
<asp:Label id="label1" runat="server" Text='<%#Eval("title") %>'></asp:Label>
</li>
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<asp:Label id="label2" runat="server" Text='<%#Eval("title") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
--------------------编程问答-------------------- 有ul li应该就可以,如果Repeater不行换成DataList --------------------编程问答--------------------
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindTitle();
}
}
public void BindTitle()
{
string sqlexe = "select * from big";
this.Repeater1.DataSource = help.GetDataSet(sqlexe, null, false);
this.Repeater1.DataBind();
BindClass();
}
public void BindClass()
{
foreach (RepeaterItem Item in Repeater1.Items)
{
Label lbl = (Label)Item.FindControl("label1");
Repeater rpt = (Repeater)Item.FindControl("Repeater2");
string sqlexe = "select * from class where big='" + lbl.Text + "'";
rpt.DataSource = help.GetDataSet(sqlexe, null, false);
rpt.DataBind();
}
}
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<div style="float: left; width: 200px;">
<div style="height:20px;">字段1</div>
<div style="height:20px;">字段2</div>
<div style="height:20px;">字段3</div>
</div>
</ItemTemplate>
</asp:DataList>
不知道这么写,你是否看得懂。 --------------------编程问答-------------------- <asp:DataList ID="DataList1" runat="server">
<HeaderTemplate>
<div style="float: left; width: 200px;">
<div style="height:20px;">字段名1</div>
<div style="height:20px;">字段名2</div>
<div style="height:20px;">字段名3</div>
</div>
</HeaderTemplate>
<ItemTemplate>
<div style="float: left; width: 200px;">
<div style="height:20px;">字段1</div>
<div style="height:20px;">字段2</div>
<div style="height:20px;">字段3</div>
</div>
</ItemTemplate>
</asp:DataList>
补充上面 --------------------编程问答--------------------
UP --------------------编程问答-------------------- 有那么复杂吗! 控件样式改下不就好了!!!!!!!!!!!!!!
怎么学习的 这跟数据没关系 --------------------编程问答--------------------
这是正解楼上的全白白!!!
在控件属性里也可以改! --------------------编程问答--------------------
嗯 --------------------编程问答--------------------
横向显示,这样就不行了 --------------------编程问答--------------------
能稍微详细说说么? --------------------编程问答--------------------
呵呵,那你能详细说下么,怎么修改样式呢?我的问题你看清楚了么? --------------------编程问答--------------------
junsir的答案是最好的答案
楼主你有没有仔细的看看这CSS的样式啊?
估计你没有懂里面的精髓
所以有时候别人给了最佳答案,你却看不到
你这计算机难学了啊
dl1.RepeatDirection = RepeatDirection.Horizontal; //设为横显示
dl1.RepeatColumns = 12; //设置每行显示的数目
这样做也是可以的啊,楼主你有没有试啊。当然我不喜欢用控件,所以我推荐第一个灵活的方法
这么多答案楼主还问??
哎~~~~~~~~~~~~~~~~~~~~~~~~~可悲啊 --------------------编程问答-------------------- 表头如何能纵向显示
====================
你在显示数据的控件前面放个HTML的表头就是了啊
随便用DIV还是UL都可以的啊
FLOAT浮动一下就是了啊。 --------------------编程问答-------------------- <table id="hbTable1" width="608" height="168" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" style=" padding-top:10px;padding-left:8px">
<asp:DataList ID="DDLparent1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3">
<ItemTemplate>
<table width="180px" border="0" cellpadding="0" cellspacing="0" style="font-size:9pt; color:#ff9900"><tr><td valign="top"><img src="images/dot_icon.gif" alt="" border="0" /> <a href="HtmlTradeList.aspx" target="_blank"><font color="#ff9900"><%# DataBinder.Eval(Container.DataItem, "Type")%></font></a></td></tr></table>
<table width="180px" cellpadding="0" cellspacing="0" height="50px">
<tr>
<td valign="top">
<asp:Repeater ID="Rptchild1" runat="server" datasource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'
RepeatDirection = "RepeatDirection.Horizontal" RepeatColumns="12">
<itemtemplate>
<a href="Htmltradenews.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "[\"ID\"]")%>" target="_blank"><img src="images/arrow.gif" border="0"/> <span style="font-size:9pt;padding-left:5px"><%# DataBinder.Eval(Container.DataItem, "[\"title\"]")%></span></a><br />
</itemtemplate>
</asp:Repeater>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindPrinSubDll(DDLparent7, "select columntype from lawrule group by columntype", "select id,Columntype,(left(title,20)+'...') title from lawrule a where id in (select top 3 id from lawrule b where a.columntype=b.columntype and b.tradetype='房产法规' order by b.id desc) order by columntype , id desc", "columntype");
}
}
public void BindPrinSubDll(DataList ddl,string psql,string csql,string strfiled)
{
conn.Open();
SqlDataAdapter cmd1 = new SqlDataAdapter(psql,conn);
DataSet ds = new DataSet();
cmd1.Fill(ds, "parentTable");
SqlDataAdapter cmd2 = new SqlDataAdapter(csql,conn);
cmd2.Fill(ds, "childTable");
ds.Relations.Add("myrelation",
ds.Tables["parentTable"].Columns[strfiled],
ds.Tables["childTable"].Columns[strfiled]);
// 绑定Authors到父Repeater
ddl.DataSource = ds.Tables["parentTable"];
ddl.DataBind();
conn.Close();
}
--------------------编程问答-------------------- 表头和后面的信息都可以动态加载.只是你的数据表数据选择你自己要处理下。说白了如果要动态加载也就是主从表 --------------------编程问答-------------------- <asp:DataList ID="DDLparent1" runat="server" RepeatDirection="Horizontal" RepeatColumns="1">
<ItemTemplate>
<table>
<td><%# DataBinder.Eval(Container.DataItem, "Type")%></td>
<td>
<asp:Repeater ID="Rptchild1" runat="server" datasource=' <%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'
RepeatDirection = "RepeatDirection.Horizontal" RepeatColumns="12">
.......
</asp:Repeater>
</td>
</table>
</ItemTemplate>
<asp:DataList>
模版样式是这样的. --------------------编程问答--------------------
谢谢,你说的我当然知道,不过对齐要花一翻工夫,本来是想用控件能简单的解决的,实则还是要做好多后台处理.
--------------------编程问答-------------------- 帮up下~~~~ --------------------编程问答--------------------
把子的RepeatColumns="10" 设置大一点,还有控制父的<ItemTemplate>的宽度为10%
<AlternatingItemTemplate>宽度为90%
这样就会
栏目名1 data01 data11 data02 data12 data03 data13 主要是样式控制啊!
--------------------编程问答-------------------- 感谢各位的解答,特别感谢 antiking ,按照你的方法,我解决了。
补充:.NET技术 , ASP.NET