2016-09-29 2 views
2

Я хочу использовать таблицу HTML вместо gridview для сбора данных. Почему таблица HTML? Потому что я буду использовать вывод для отправки по электронной почте, поэтому предпочитаю HTML-таблицу вместо gridview. Также я не хочу использовать объект, поскольку система будет работать только на сервере. Он автоматически отправит электронное письмо. Может ли кто-нибудь помочь мне с моей проблемой? Спасибо.Используйте таблицу HTML вместо Gridview

Вот что у меня есть. В приведенном ниже примере я использую gridview, потому что я не знаю, как это сделать, используя таблицу HTML, используя Append.

Vb.Net

Это, как я называю свою функцию

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

Это моя функция электронной почты, который я хочу, чтобы быть преобразованы в 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 

Код работает, но не так, как я хочу. Я не хочу использовать gridview. Я хочу, чтобы это было в таблице html, например:

Dim builder As New StringBuilder 
     builder.Append("<!DOCTYPE html><html>") 
     builder.Append("<head>") 
     builder.Append("</head>") 
     builder.Append("<body>") 
     builder.Append("<table>") 
     builder.Append("</table>") 
     builder.Append("<body>") 

Любая помощь была бы высоко оценена! :) Спасибо.

+0

Это ложное противоположное. GridView - это элемент управления на стороне сервера, который может отображать таблицу HTML. Другими словами, он может делать то, что вы просите, без необходимости писать HTML.Поверните все причудливые параметры (например, разбивку на страницы), дайте им некоторые определения столбцов и вуаля. –

ответ

1

В качестве опции вы можете использовать Run-Time Text Template для создания шаблона электронной почты. Таким образом, вы можете просто использовать модель для генерации вывода с использованием шаблона. Это похоже на то, что вы можете сделать с помощью ASP.NET MVC и Razor, но это не ограничивается MVC или даже ASP.NET. Вы можете использовать эту идею везде, где вам нужно создать шаблон.

Шаблон времени выполнения работает как страница aspx. Для человека, который знает ASP.NET с использованием шаблонов t4, очень просто. Он использует директивы и теги, а вы смешиваете контент и код. Вы используете код для динамического вывода. Затем он отображает контент, когда вы вызываете его метод TransformText.

Вы можете использовать любой тип как Model. Модель может быть одной из ваших бизнес-моделей или моделей моделей просмотра, или она может быть DataTable.

Пример

Добавить новый класс в проект:

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

Добавить новый Run-Time Text Template (который также известен как препроцессированные Template) и назовите его 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

+0

Извините, забыл упомянуть, что мне не разрешено использовать объектное или кодирование переднего конца. Мне нужно сделать все это на заднем плане. У вас есть идея, как ее достичь? –

+0

Это полностью основанная на сервере кодировка. Также, как я упомянул в ответе, вы можете использовать любую модель, включая «DataTable». Это действительно полезный метод, который можно применять в любых приложениях, чтобы иметь такие вещи, как шаблоны писем. –

+0

Извините, но я не знаком с этим. Я не знаю, как я собираюсь объединить ваше предложение с моими кодами. Можете ли вы дать мне образец, используя мой код? Спасибо. –