2016-09-29 7 views
2

gridview 대신 HTML 표를 사용하여 데이터를 처리하고 싶습니다. 왜 HTML 테이블인가? 왜냐하면 전자 메일을 보낼 때 출력을 사용하므로 gridview 대신 HTML 표를 사용하는 편이 낫습니다. 또한 시스템이 서버에서만 실행되므로 객체를 사용하고 싶지 않습니다. 자동으로 이메일을 보냅니다. 아무도 내 문제를 도와 줄 수 있습니까? 고맙습니다.Gridview 대신 HTML 표 사용

여기까지 제가 지금까지 있습니다. 아래 예제에서는 Append를 사용하여 HTML Table을 사용하는 방법을 모르기 때문에 gridview를 사용하고 있습니다.

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 표에 다음과 같이 입력하십시오 :

어떤 도움을 주실 수 있나요? :) 고맙습니다.

+0

이 거짓 반대입니다. GridView는 HTML 테이블을 렌더링 할 수있는 서버 측 컨트롤입니다. 즉, HTML을 작성하지 않고도 원하는 것을 할 수 있습니다.모든 멋진 옵션 (예 : 페이지 매김)을 끄고, 열 정의를 지정하고, 잘 읽습니다. –

답변

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

+0

죄송합니다. 객체 또는 프런트 엔드 코딩을 사용하도록 허용되지 않았습니다. 백엔드에서이 모든 작업을 수행해야합니다. 아이디어를 얻으려면 어떻게해야합니까? –

+0

완전히 서버 기반 코딩입니다. 또한 대답에서 언급했듯이 'DataTable'을 포함하여 모든 유형의 모델을 사용할 수 있습니다. 그것은 전자 메일 템플릿과 같은 것을 갖기 위해 모든 종류의 응용 프로그램에 적용될 수있는 정말 유용한 기술입니다. –

+0

미안하지만 나는 그것에 익숙하지 않다. 나는 당신의 제안을 나의 코드와 어떻게 병합 할 것인지 모른다. 내 코드를 사용하여 샘플을 제공해 주시겠습니까? 고맙습니다. –