使用HTML表而不是Gridview

时间:2016-09-29 02:12:20

标签: html asp.net vb.net aspxgridview

我想使用HTML表而不是gridview来处理数据。为何选择HTML表?因为我将使用输出进行电子邮件发送,所以我更喜欢HTML Table而不是gridview。此外,我不想使用对象,因为系统只能在服务器上运行。它会自动发送电子邮件。任何人都可以帮我解决我的问题吗?谢谢。

这是我到目前为止所拥有的。在下面的示例中,我使用gridview,因为我不知道如何使用Append使用HTML表格来完成它。

Vb.Net

这就是我调用我的功能的方式

     header ("Location: main.php?area=".$_POST["area"]);

这是我的电子邮件功能,我希望使用append转换为html表。

 Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        SendEmail()
 End Sub

代码工作但不是我想要的方式。我不想使用gridview。我希望它在html表中,如:

Protects Sub SendEmail()
     For Each dt As System.Data.DataTable In prod3()
            Dim i As Integer = i + 1
            Dim dv As New System.Data.DataView(dt)
            Dim dt2 As System.Data.DataTable = dv.ToTable(False, {"Name", "Product", "Expiry"})
            Dim y As Date = dt.Rows(0)("pdate")
        Dim dte1, dte2, dte3 As String

            Select Case i
                Case 1
                    dte1 = dt.Rows(0)("pdate").ToString
                    dte1 = y.Date.ToString("MM/dd/yyyy")
                    dte1 = y
                    GridView11.DataSource = dt2
                    GridView11.DataBind()
                Case 2
                    dte2 = dt.Rows(0)("pdate").ToString
                    dte2 = y.Date.ToString("MM/dd/yyyy")
                    dte2 = y
                    GridView12.DataSource = dt2
                    GridView12.DataBind()
                Case 3
                    dte2 = dt.Rows(0)("pdate").ToString
                    dte2 = y.Date.ToString("MM/dd/yyyy")
                    dte2 = y
                    GridView13.DataSource = dt2
                    GridView13.DataBind()
            End Select

        Next
End SUb

Public Function prod3() As List(Of DataTable)

        Dim ds As New DataSet
        Dim cmd As New SqlCommand
        Dim ldt As New List(Of DataTable)
        Dim adp As SqlDataAdapter = New SqlDataAdapter
        Dim c As New SqlConnection("myconnection")
        cmd.Connection = c
        cmd.CommandText = "storedprocname"
        cmd.Parameters.AddWithValue("@name", "%")
        cmd.Parameters.AddWithValue("@product", "%")
        cmd.Parameters.AddWithValue("@expiry", "%")
        cmd.Parameters.AddWithValue("@datefrom", DateTime.Today.AddDays(1)) 
        cmd.Parameters.AddWithValue("@dateto", DateTime.Today.AddDays(3)) 
        cmd.Parameters.AddWithValue("@cost", "%")
        cmd.CommandType = CommandType.StoredProcedure
        adp.SelectCommand = cmd
        adp.Fill(ds)
        Dim dv As New DataView(ds.Tables(0))
        Dim dvfilter As DataTable = dv.ToTable(True, {"pdate"})
        For Each dtrow As DataRow In dvfilter.Rows
            Dim dt2 As New DataTable
            dv.RowFilter = "date =#" + dtrow("pdate") + "#"
            dt2 = dv.ToTable(False, {"DATE", "Name", "Product", "Expiry"})
            ldt.Add(dt2)
        Next
        Return ldt
    End Function

任何帮助将不胜感激! :) 谢谢。

1 个答案:

答案 0 :(得分:1)

作为选项,您可以使用Run-Time Text Template创建电子邮件模板。这样,您只需使用模型即可使用模板生成输出。这就像使用ASP.NET MVC和Razor引擎可以做的那样,但它不仅限于MVC甚至ASP.NET。您可以在需要创建模板的任何地方使用此想法。

运行时文本模板的工作方式类似于aspx页面。对于使用t4模板了解ASP.NET的人来说非常简单。它使用指令和标签,并混合内容和代码。您使用代码使输出动态。然后,当您调用其TransformText方法时,它会呈现内容。

您可以将任何类型用作Model。该模型可以是您的业务或视图模型类之一,也可以是DataTable

示例

在项目中添加一个新类:

Public Class Product
    Public Property Name As String
    Public Property Price As Integer
End Class

添加新的运行时文本模板(也称为预处理模板)并将其命名为MailTemplate。然后将此内容放入文件:

<#@ template language="VB" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ parameter type="System.Collections.Generic.List(Of Product)" name="Model"#>
<html>
<head>
    <title>Products</title>
    <style type="text/css">
        body { font-family: Calibri;width:400px;}
        table { text-align:center; }
        .container {width:400px;}
    </style>
</head>
<body>
<div class="container">
<h1 style="text-align:center;">List of Recent Products</h1><hr/>
Here is list of recent products:
<table style="width:100%">
    <tr><th>Index</th><th>Name</th><th>Price</th></tr>
    <# Dim index As Integer = 1
       For Each item in Model 
    #>
    <tr>
        <td><#=index#></td>
        <td><#=item.Name#></td>
        <td><#=item.Price#></td>
    </tr>
    <#     index = index + 1
       Next 
    #>
</table>
<div>
</body>
</html>

使用此代码在运行时生成输出:

Dim template As New My.Templates.MailTemplate
template.Session = New Dictionary(Of String, Object)
Dim model = New List(Of Product)()
model.Add(New Product With {.Name = "Product 1", .Price = 100})
model.Add(New Product With {.Name = "Product 2", .Price = 100})
model.Add(New Product With {.Name = "Product 3", .Price = 100})
template.Session("Model") = model
template.Initialize()
Dim output = template.TransformText()

现在您可以使用输出发送电子邮件或将其写入回复。

结果将是:

enter image description here