我想使用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
任何帮助将不胜感激! :) 谢谢。
答案 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()
现在您可以使用输出发送电子邮件或将其写入回复。
结果将是: