鬼鬼DH

导航

 
这个表格的数据涉及到两表:
即:学院表和专业表。其中学院包括若干专业,有个XYID进行关联。
学院表:

专业表:
从略

先说说前台代码,大致由一固定的表格,和若干动态表格构成,这里我用到了dataLisT这个控件。
<table width=100% cellpadding=0 cellspacing=0 border=1 style="border-bottom-color:Red">
    <tr style="background-color:Red" align=center>
        <td style="width: 30% " >
            <span style="color: #ffffff">院系</span></td>
        <td style="width: 40%">
            <span style="color: #ffffff ">专业</span></td>
        <td style="width: 10%">
            <span style="color: #ffffff">&nbsp;学历</span></td>
        <td style="width: 20%">
            <span style="color: #ffffff">总计</span></td>
    </tr>
    <tr>
        <td style="width: 30%">
            本科合计</td>
        <td style="width: 40%">
        </td>
        <td style="width: 10%">
        </td>
        <td style="width: 20%" align='center'>
        <%=count %>
        </td>
    </tr>
</table>
<asp:DataList ID="dlzy" runat="server" Width="100%" OnItemDataBound="dlzy_ItemDataBound">
    <ItemTemplate>
      <table width="100%" cellpadding="0" cellspacing="0"  border="1" style="border-color:Red">
    <tr>
        <td style="width: 30%" align="left" valign="middle">
        <%#Eval("yuanxi") %>
        </td>
        <td style="width: 70%" align="center" valign="top">
         <asp:Label ID="lblzy" runat="server" Text="动态专业表格"></asp:Label>
        </td>
    </tr>
</table>
    </ItemTemplate>
</asp:DataList>

效果如下:

后台代码如下:

 DB db = new DB();
    public static int count=0;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dlbind();
        }
    }
    private void dlbind()
    {
        DataTable dt = new DataTable();
        dt = db.SqlDataset("select * from ssyx");
        dlzy.DataSource = dt.DefaultView;
        dlzy.DataBind();
    }
    protected void dlzy_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lab = (Label)e.Item.FindControl("lblzy");
            int id = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "yxid"));
            string cmdStr = "select * from zyjieshao where ssyx=" + id;
            DataTable dt=new DataTable();
            dt=db.SqlDataset(cmdStr);
            lab.Text = "<table width='100%' cellpadding='0' cellspacing='0'  border='1'>";
              
                for (int i = 1; i < dt.Rows.Count; i++)
                {
                    lab.Text+=" <tr><td style='width: 57% ' align='center' valign='middle'>";
                    lab.Text += dt.Rows[i][1].ToString();
                    lab.Text+="</td > <td style='width: 15% ' align='center' valign='middle'>本科</td>";
                    lab.Text+="<td style='width: 28% ' align='center' valign='middle'>";
                    lab.Text += dt.Rows[i][7].ToString()+"</td></tr>";
                    count=count+Convert.ToInt32(dt.Rows[i][7].ToString());
                }
                lab.Text += "</table>";

        }
    }

其中DB类是自己写的简单的底层的数据库连接类,这里就不详细说明了,我用了里面的一方法SqlDataset()返回的是个DATATABLE值。
这里最关键的地方在于在DATALIST里面进行数据再次邦定,这里是在自带的ItemDataBound()方法里面实现的。其中  int id = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "yxid"));
是查找出第一次绑定时的学院ID,因为我们需要这个ID来找到其所属的若干专业。
还有COUNT这个值是用来计算人数总数的,很简单,不再赘述。
这个我自己想到的,用asp:Label 这个控件来装载标记语言,使之动态生成了右边的表格。
效果如下:


如有高手有更好更效率的方法,请给小弟指教!
posted on 2009-07-24 16:28  鬼鬼DH  阅读(675)  评论(0编辑  收藏  举报