如何用ASP.NET、Javascript解决方案实现表格式布局

如何用ASP.NET、Javascript解决方案实现表格式布局,javascript,asp.net,html,Javascript,Asp.net,Html,我们需要实现表的以下结构(这是一个示例;数据源是动态的)。请注意,该月有中间值总计(总和) 如果我们除了计算出的Total之外还有数据源(日期和金额),您有什么建议动态生成这种表格样式的布局吗 Date Amount ========================== 1 Nov 300 22 Nov 500 30 Nov 200 Total 1000 5 Dec 100 28 Dec 200 Total 300 谢谢。为什么需要Javascrip

我们需要实现表的以下结构(这是一个示例;数据源是动态的)。请注意,该月有中间值总计(总和)

如果我们除了计算出的Total之外还有数据源(日期和金额),您有什么建议动态生成这种表格样式的布局吗

Date     Amount
==========================
1  Nov   300
22 Nov   500
30 Nov   200
Total    1000
5  Dec   100
28 Dec   200
Total    300

谢谢。

为什么需要Javascript?这是表格数据,使用表格

<table>
    <thead>
        <tr>
            <th scope="col">Date</th>
            <th scope="col">Amount</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1 Nov</td>
            <td>300</td>
        </tr>
        <tr>
            <td>22 Nov</td>
            <td>500</td>
        </tr>
        <tr>
            <td>30 Nov</td>
            <td>200</td>
        </tr>
        <tr>
            <th scope="row">Total</th>
            <td>1000</td>
        </tr>
        <tr>
            <td>5  Dec</td>
            <td>100</td>
        </tr>
        <tr>
            <td>28 Dec</td>
            <td>200</td>
        </tr>
        <tr>
            <th scope="row">Total</th>
            <td>300</td>
        </tr>
    </tbody>
</table>

日期
数量
11月1日
300
11月22日
500
11月30日
200
全部的
1000
12月5日
100
12月28日
200
全部的
300

我不是100%确定行标题的语义,但我非常确定这是正确的。

为什么需要Javascript?这是表格数据,使用表格

<table>
    <thead>
        <tr>
            <th scope="col">Date</th>
            <th scope="col">Amount</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1 Nov</td>
            <td>300</td>
        </tr>
        <tr>
            <td>22 Nov</td>
            <td>500</td>
        </tr>
        <tr>
            <td>30 Nov</td>
            <td>200</td>
        </tr>
        <tr>
            <th scope="row">Total</th>
            <td>1000</td>
        </tr>
        <tr>
            <td>5  Dec</td>
            <td>100</td>
        </tr>
        <tr>
            <td>28 Dec</td>
            <td>200</td>
        </tr>
        <tr>
            <th scope="row">Total</th>
            <td>300</td>
        </tr>
    </tbody>
</table>

日期
数量
11月1日
300
11月22日
500
11月30日
200
全部的
1000
12月5日
100
12月28日
200
全部的
300

我不是100%确定行标题的语义,但我非常确定这是正确的。

如果问题只是关于布局,那么它应该非常简单,因为“总计”行的单元格数与所有其他行相同。只需将CSS类应用于这些行,就可以使它们区分开来

问题是,如何检索数据?它是否也包括总数,还是必须实时计算


如果必须是运行总计,则可以使用GridView、Repeater或ListView创建表,并注册控件的OnItemDataBound/OnRowDataBound事件来计算它。我相信您可以通过这些事件中可用的数据项访问这些值,通过比较当前行的月份与前一行的月份,您知道何时插入总行,并重置计数器。

如果问题只是关于布局,那么应该非常简单,因为“总计”行与所有其他行的单元格数相同。只需将CSS类应用于这些行,就可以使它们区分开来

问题是,如何检索数据?它是否也包括总数,还是必须实时计算


如果必须是运行总计,则可以使用GridView、Repeater或ListView创建表,并注册控件的OnItemDataBound/OnRowDataBound事件来计算它。我相信您可以通过这些事件中可用的数据项访问这些值,通过比较当前行的月份与前一行的月份,您知道何时插入总行,并重置计数器。

您可以从这里获得一些想法:

<html>
<body>
    <script>
        var data =[
            {d:1, m:'nov', a:300},
            {d:22, m:'nov', a:500},
            {d:30, m:'nov', a:20},          
            {d:5, m:'dec', a:1000},
            {d:28,m:'dec', a:200},
            {d:9,m:'dec', a:300}
        ];

        var total = 0 ;
        var prev='';

        var htm = [];
        htm.push('<table border="1">');
        htm.push('<tr><th>Date</th><th>Amount</th></tr>');
        for(var i=0;i<data.length;i++){
            var d = data[i].d;
            var m = data[i].m;
            var a = data[i].a;

            if(prev!='' && prev!=m){
                htm.push('<tr style="font-weight:bold;"><td>Total</td><td>' + total + '</td></tr>');
                total = 0;
            }
            total = total + a;
            prev = m;

            htm.push('<tr><td>' + d + ' ' + m + '</td><td>' + a + '</td></tr>');            
        }
        htm.push('<tr style="font-weight:bold;"><td>Total</td><td>' + total + '</td></tr>');
        htm.push('</table>');

        document.write(htm.join(''));
    </script>
</body>
</html>

var数据=[
{d:1,m:nov',a:300},
{d:22,m:nov',a:500},
{d:30,m:11',a:20},
{d:5,m:'dec',a:1000},
{d:28,m:'dec',a:200},
{d:9,m:'dec',a:300}
];
var合计=0;
var prev='';
var htm=[];
htm.push(“”);
htm.push('DateAmount');

对于(var i=0;i您可以从这里获得想法:

<html>
<body>
    <script>
        var data =[
            {d:1, m:'nov', a:300},
            {d:22, m:'nov', a:500},
            {d:30, m:'nov', a:20},          
            {d:5, m:'dec', a:1000},
            {d:28,m:'dec', a:200},
            {d:9,m:'dec', a:300}
        ];

        var total = 0 ;
        var prev='';

        var htm = [];
        htm.push('<table border="1">');
        htm.push('<tr><th>Date</th><th>Amount</th></tr>');
        for(var i=0;i<data.length;i++){
            var d = data[i].d;
            var m = data[i].m;
            var a = data[i].a;

            if(prev!='' && prev!=m){
                htm.push('<tr style="font-weight:bold;"><td>Total</td><td>' + total + '</td></tr>');
                total = 0;
            }
            total = total + a;
            prev = m;

            htm.push('<tr><td>' + d + ' ' + m + '</td><td>' + a + '</td></tr>');            
        }
        htm.push('<tr style="font-weight:bold;"><td>Total</td><td>' + total + '</td></tr>');
        htm.push('</table>');

        document.write(htm.join(''));
    </script>
</body>
</html>

var数据=[
{d:1,m:nov',a:300},
{d:22,m:nov',a:500},
{d:30,m:11',a:20},
{d:5,m:'dec',a:1000},
{d:28,m:'dec',a:200},
{d:9,m:'dec',a:300}
];
var合计=0;
var prev='';
var htm=[];
htm.push(“”);
htm.push('DateAmount');
对于(var i=0;i您应该看一看。此外,还有一个非常好的插件,您可以使用它轻松实现一个分离良好的模板:。优点是您可以通过Web服务惰性地加载数据

但是正如Gidon评论的那样,您可以通过简单地使用标准asp.net机制和构建表服务器端(例如,使用嵌套的Repeater/DataGrid或任何datacontrol)轻松实现想要的行为

带着亲切的问候

你应该看看。另外,还有一个非常好的插件,你可以轻松地实现一个很好的分离模板:。优点是你可以通过Web服务惰性地加载数据

但是正如Gidon评论的那样,您可以通过简单地使用标准asp.net机制和构建表服务器端(例如,使用嵌套的Repeater/DataGrid或任何datacontrol)轻松实现想要的行为


出于善意,您可以使用中继器。请注意,此解决方案只是一个示例,可以在许多方面进行改进

<table>
    <tr>
        <th>Date</th>
        <th>Amount</th>
    </tr>
    <asp:Repeater ID="myRepeater" runat="server" OnItemDatabound="myRepeater_Databound">
        <ItemTemplate>
            <tr>
                <td><%# Eval("Date", "{0:dd MMM}") %></td>
                <td><%# Eval("Amount") %></td>
            </tr>
            <tr id="trMonthlyTotal" runat="server" Visible="false">
                <td>Total</td>
                <td><asp:Literal id="ltMontlyTotal" runat="server" /></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

请注意,这个解决方案只是一个例子,可以在许多方面加以改进

<table>
    <tr>
        <th>Date</th>
        <th>Amount</th>
    </tr>
    <asp:Repeater ID="myRepeater" runat="server" OnItemDatabound="myRepeater_Databound">
        <ItemTemplate>
            <tr>
                <td><%# Eval("Date", "{0:dd MMM}") %></td>
                <td><%# Eval("Amount") %></td>
            </tr>
            <tr id="trMonthlyTotal" runat="server" Visible="false">
                <td>Total</td>
                <td><asp:Literal id="ltMontlyTotal" runat="server" /></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

你在问什么?HTML是如何工作的?ASP.NET是如何工作的?我的意思是基于数据源(日期和金额)动态生成表格样式UI。你在问什么?HTML是如何工作的?ASP.NET是如何工作的?我的意思是基于数据源(日期和金额)动态生成表格样式UI对不起,数据源是动态的,不是静态的。我如何动态生成表格样式的UI。对不起,数据源是动态的,不是静态的。我如何动态生成表格样式的UI。