当前位置:编程学习 > C#/ASP.NET >>

思归及各位大侠请指点,如何采用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画好固定试试 --------------------编程问答-------------------- 貌似如此
引用 1 楼 zq9811 的回复:
  dl1.RepeatDirection  =  RepeatDirection.Horizontal;  //设为横显示  
  dl1.RepeatColumns  =  12;  //设置每行显示的数目
--------------------编程问答-------------------- 两重循环搞定:

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>

--------------------编程问答--------------------
引用 1 楼 zq9811 的回复:
  dl1.RepeatDirection  =  RepeatDirection.Horizontal;  //设为横显示  
  dl1.RepeatColumns  =  12;  //设置每行显示的数目

支持 --------------------编程问答--------------------


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怎么布局,看你自己的了
    */
}

--------------------编程问答-------------------- 感谢 phper2008  ,但是还是不符合我的要求,结果是出现了 这样的情况:

         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> 

--------------------编程问答--------------------

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();
        }
    } 
--------------------编程问答-------------------- 有ul li应该就可以,如果Repeater不行换成DataList --------------------编程问答--------------------
 <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 --------------------编程问答-------------------- 有那么复杂吗! 控件样式改下不就好了!!!!!!!!!!!!!!

怎么学习的 这跟数据没关系 --------------------编程问答--------------------
引用 1 楼 zq9811 的回复:
  dl1.RepeatDirection  =  RepeatDirection.Horizontal;  //设为横显示  
  dl1.RepeatColumns  =  12;  //设置每行显示的数目


这是正解楼上的全白白!!!

在控件属性里也可以改! --------------------编程问答--------------------
引用 14 楼 hhhh63 的回复:
有两个办法:

1、在SQL语句中用这个TRANSFORM 可以直接得到一个横的表。

2. 生成一段html文本。

我一般是用第二种方法, 比较灵活。


嗯 --------------------编程问答--------------------
引用 18 楼 junsir 的回复:
HTML code <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>




横向显示,这样就不行了 --------------------编程问答--------------------
引用 14 楼 hhhh63 的回复:
有两个办法: 

1、在SQL语句中用这个TRANSFORM 可以直接得到一个横的表。 

2. 生成一段html文本。 

我一般是用第二种方法, 比较灵活。


能稍微详细说说么? --------------------编程问答--------------------
引用 21 楼 angelxdb 的回复:
有那么复杂吗! 控件样式改下不就好了!!!!!!!!!!!!!! 

怎么学习的 这跟数据没关系


呵呵,那你能详细说下么,怎么修改样式呢?我的问题你看清楚了么? --------------------编程问答--------------------
引用 24 楼 ubc 的回复:
引用 18 楼 junsir 的回复:
HTML code  <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>





横向显示,这样就不行了


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>

模版样式是这样的. --------------------编程问答--------------------
引用 28 楼 cteddy 的回复:
表头如何能纵向显示 
==================== 
你在显示数据的控件前面放个HTML的表头就是了啊 
随便用DIV还是UL都可以的啊 
FLOAT浮动一下就是了啊。


谢谢,你说的我当然知道,不过对齐要花一翻工夫,本来是想用控件能简单的解决的,实则还是要做好多后台处理.



--------------------编程问答-------------------- 帮up下~~~~ --------------------编程问答--------------------
引用 10 楼 ubc 的回复:
感谢 phper2008  ,但是还是不符合我的要求,结果是出现了 这样的情况: 

        data01    data11  .... 
栏目名1  data02    data12  .... 
        data03    data13  .... 

        data01    data11  .... 
栏目名2  data02    data12  .... 
        data03    data13  .... 

        data01    data11  .... 
栏目名3  data02    data12  .... 
        data03    data13  .... 


把子的RepeatColumns="10" 设置大一点,还有控制父的<ItemTemplate>的宽度为10%
 <AlternatingItemTemplate>宽度为90%
这样就会
       
栏目名1  data01    data11   data02    data12   data03    data13  主要是样式控制啊! 

--------------------编程问答-------------------- 感谢各位的解答,特别感谢 antiking ,按照你的方法,我解决了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,