วันอาทิตย์ที่ 5 กรกฎาคม พ.ศ. 2558

asp.net : วันที่แบบเต็ม ภาษาไทย

แสดงวันเดือนปี ภาษาไทย


ต้องการวันที่ปัจจุบัน
เช่น     "วันที่ 06 เดือน กรกฎาคม พุทธศักราช 2558"  
 
Code
Imports System.Globalization
 
Dim cultInfo As CultureInfo = New CultureInfo("th-TH")
Dim fmt As DateTimeFormatInfo = cultInfo.DateTimeFormat
 
'ต้องต่อ string เอา 
Dim strdate As String = "วันที่ " & Date.Now.ToString("dd") & " เดือน " & Date.Now.ToString("MMMM", fmt) & " พุทธศักราช " & Date.Now.ToString("yyyy", fmt)
 
 ข้อสังเกต
 
ใช้    Date.Now.ToString("format", Culture format )
 
"format" สามารถเป็นได้หลากหลายมาก 
วันที่  :  d=6, dd=06, ddd=พ, dddd=พุธ
เดือน   : M=7, MM=07, MMM=กค., MMMM=กรกฎาคม
ปี  :  yy=58, yyyy=2558
 
ตัวอย่างเช่น
- Date.Now.ToString("d/M/yy", fmt )   =>   6/7/58
- Date.Now.ToString("dd-MM-yyyy", fmt )   =>   06-07-2558
- Date.Now.ToString("MMMM", fmt )   =>  กรกฎาคม

เพิ่มเติม
https://msdn.microsoft.com/en-us/library/az4se3k1.aspx
 
 

วันพฤหัสบดีที่ 2 กรกฎาคม พ.ศ. 2558

asp.net : Insert Text to pdf (แทรกข้อความลงใน pdf)

แทรกขอความลงใน pdf ไฟล์โดยใช้ iTextsharp

เครื่องมือ : 

  1. Visual Stodio 2010 (2005->2015 คิดว่าได้หมด)
  2. iTextSharp Library
  3. ไฟล์ font THSarabun.ttf
  4. ไฟล์ pdf  ที่ต้องการเขียนข้อความลงไป (cert.pdf)

วิธีการ :
  1. download iTextsharp lib จาก http://sourceforge.net/projects/itextsharp/
  2. แตกไฟล์ หาไฟล์ชื่อว่า iTextsharp.dll
  3. เปิด VS สร้างโปรเจค vb web เปล่า และนำเข้าไฟล์ pdf ที่จะ insert ข้อความ(cert.pdf)
  4. นำเข้าใฟล์ iTextsharp.dll ไว้ในโฟลเดอร์ bin ของโปรเจค
  5. นำเข้าใฟล์ Font THSarabun.ttf ไว้ในโฟลเดอร์ fonts ภาษาไทยใช้ font แห่งชาติ จะไม่มีปัญหาสระซ้อน
  6. Add Reference เลือกไฟล์ /bin/iTextsharp.dll 
  7. add  new WebForm1
  8. ก็อบ sub  InsertTextToPdf() ข้างล่างวางในส่วน Code ของ WebForm1
  9. เรียก InsertTextToPdf() ใน Form Load ของ WebForm1
  10. สร้าง iFrame วางใน WebForm1 ดังนี้ 
<iframe src="/certificate.pdf" style="border-style: none; border-color: inherit; border-width: 0px; width: 900px; height: 700px ; "></iframe>


ส่วน import

     Imports System
     Imports System.IO
     Imports System.Xml
     Imports iTextSharp
     Imports iTextSharp.text
     Imports iTextSharp.text.pdf
     Imports iTextSharp.text.xml


    Private Sub InsertTextToPdf()

        'ไฟล์ที่จะ insert ข้อวาม
        Dim oldFile As String = Server.MapPath("~/cert.pdf")
        'ไฟล์ใหม่
        Dim newFile As String = Server.MapPath("~/certificate.pdf")

        Using pdfStream As Stream = New FileStream(oldFile, FileMode.Open)

            Using newpdfStream As Stream = New FileStream(newFile, FileMode.Create, FileAccess.ReadWrite)
                Dim pdfReader As New PdfReader(pdfStream)
                Dim pdfStamper As New PdfStamper(pdfReader, newpdfStream)
                Dim pdfContentByte__1 As PdfContentByte = pdfStamper.GetOverContent(1)

                'กำหนด Font สีและขนาด
                Dim baseFont__2 As BaseFont = BaseFont.CreateFont(Server.MapPath("/fonts/THSarabun.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED)
                pdfContentByte__1.SetColorFill(BaseColor.BLACK)
                pdfContentByte__1.SetFontAndSize(baseFont__2, 16)
                pdfContentByte__1.BeginText()

                'ข้อความและตำแหน่งที่จะเขียน  
                pdfContentByte__1.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Kevin Cheng - A Hong Kong actor", 200, 600, 0)
                pdfContentByte__1.EndText()
                pdfStamper.Close()
            End Using
        End Using

    End Sub


 Run โปรแกรมก็จะเห็น ข้อความในไฟล์ pdf  ตัว pdf แสดงฝังอยู่ในหน้าเว็บ


การประยุกต์ใช้
  • พิมพ์ใบประกาศนียบัตร ต่าง ๆ เอาข้อความหรือชื่อมาจากฐานข้อมูล
  • พิมพ์ข้อความจากฐานข้อมูลลงบนแบบฟอร์ม ที่มีอยู่แล้ว ใบเสร็จรับเงิน , invoice ฯ

สรุป
     ใช้ object Stream แบบ FileStream เก็บไฟล์เข้าหน่วยความจำ แล้วอ่านไฟล์จาก stream ด้วย pdfReader แล้วใช้ pdfstumper เขียนไฟล์
     มี Code ตัวอย่างการใช้ iTextSharp lib จากการ googling จำนวนมากต้องใช้เวลาพอสมควร ที่เจอตรงกับความต้องการ Code ส่วนใหญ่เป็น C# แต่ก็สามารถแปลงเป็น vb  มีหลายเว็บที่แปลงได้เช่น http://converter.telerik.com/

   
ตัวอย่าง การใข้งาน  iTextSharp

http://www.codeproject.com/Articles/686994/Create-Read-Advance-PDF-Report-using-iTextSharp-in

http://www.mikesdotnetting.com/article/80/create-pdfs-in-asp-net-getting-started-with-itextsharp

http://www.4guysfromrolla.com/articles/030911-1.aspx

http://www.itextpdf.com/book/chapter.php?id=1

http://www.c-sharpcorner.com/UploadFile/f2e803/basic-pdf-creation-using-itextsharp-part-i/

https://simpledotnetsolutions.wordpress.com/2012/04/08/itextsharp-few-c-examples/


วันศุกร์ที่ 20 มิถุนายน พ.ศ. 2557

SQLServer : จัดการค่า NULL

NULL เป็นปัญหาถ้าไม่จัดการให้ดี

SELECT unit * quantity AS total FROM .....
มีปัญหาเกิด error ถ้าค่า unit หรือ quantity เป็นค่า NULL 

วิธีแก้ 

1. ตอน design table ให้กำหนดค่า Default value=0 และ ห้ามเป็นค่า NULL (Allow Nulls=false)


2. หรือใช้ function ช่วย 
      2.1 ISNULL(fieldname, value_replace_IF_null)
 
               เช่น 
                      SELECT (ISNULL(unit,0) * ISNULL(quantity,0)) AS total FROM.......

      2.2 COALESCE(express1,express2, ....) คืนค่า  express ตัวแรกที่ไม่ใช่ค่า NULL หรือ 
คืนค่า NULL ถ้า express ทั้งหมดเป็นค่า NULL

เช่น 
SELECT COALESCE(NULL,NULL,300,200,NULL) จะได้ค่า 300

จากตัวอย่างข้างบน 
                      SELECT (COALESCE(unit,0) * COALESCE(quantity,0)) AS total FROM.......

นอกจากนี้ยังมีปัญหาการทดสอบค่า NULL

                ....WHERE  unit_code <>  NULL จะใช้ไม่ได้ต้องเขียนแบบนี้
               .... WHERE  unit_code IS NOT NULL  หรือ  
              .......WHERE NOT ISNULL(unit_code)



วันจันทร์ที่ 16 มิถุนายน พ.ศ. 2557

sqlserver : Update First N Record

Update First N Record

ต้องการ update 10 Record แรก


WITH First10Rows AS
(
  SELECT TOP 10 Col1,Col2,Col3,...
  FROM MyTable
  WHERE Col..= .....
  ORDER BY SomeDateColumn
)
UPDATE First10Rows
SET Col1=..., Col2=...

วันศุกร์ที่ 6 มิถุนายน พ.ศ. 2557

asp.net : Gridview Footer

การใช้งาน Footer ใน gridview ของ asp.net

ต้องการ





 ใน event RowDataBound ของ gridview

 Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        ' check row type
        If e.Row.RowType = DataControlRowType.DataRow Then
            ' if row type is DataRow, add RoomNumber value to TotalSales
            TotalRoomNumber += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "RoomNumber"))
        ElseIf e.Row.RowType = DataControlRowType.Footer Then
            ' If row type is footer, show calculated total value
            e.Row.Cells(4).Text = "รวม"
            e.Row.Cells(5).Text = TotalRoomNumber.ToString("d")
            e.Row.Cells(4).HorizontalAlign = HorizontalAlign.Center              e.Row.Cells(5).HorizontalAlign = HorizontalAlign.Center
            e.Row.Font.Bold = True  
        End If
    End Sub

วันอังคารที่ 20 พฤษภาคม พ.ศ. 2557

ASP.NET Custom Control วิธีนำ Control ที่เขียนเองมาใช้ C#

Here is how I did it, step by step starting from nothing. This first method uses a second project/assembly. For the App_code version scroll down.
Web Application Project Method
  1. Create a new ASP.Net Web Application. Take note of the name, mine is called WebApplication2. If you already have an existing web application, which is likely, double click the properties section of your project and check the "Assembly Name" property, make note of it.
  2. Create a new Class in the web applcation named Literal.cs
  3. Put in code similar to the following for the class defenition:
    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
  4. Add the following register tag to the top of your aspx page
    <%@ Register assembly="WebApplication2" namespace="CustomControls" tagprefix="web" %>
If your assembly name was different then change it here. I noticed that when I did this in VB.Net the namespace was WebApplication1.CustomControls instead of just CustomControls like it was in C#, kind of odd.
  1. Add the new control to your page:
    <web:Literal ID="Literal1" runat="server" Text="test" />
Seperate Project Method
  1. Create a new Empty Website (ASP.Net).
  2. Add a new ASP.Net Server Control library named CustomControls to the solution.
  3. Add a new Class to the new project called Literal (I'm using C# so my file is named Literal.cs). Below is my super basic code, that I believe should match the code described in the question.
    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
  4. Add a reference to the CustomControls project to your website.
  5. Add the assembly registration to the top of your aspx page:
    <%@ Register assembly="CustomControls" namespace="CustomControls" tagprefix="web" %>
  6. Add a new instance of the control to your page:
    <web:Literal ID="Literal1" runat="server" Text="test" />
In App_Code Method
  1. Create a new Empty Website (ASP.Net).
  2. Add a new Class to the App_Code folder Literal2 (I'm using C# so my file is named Literal2.cs). Below is my super basic code, that I believe should match the code described in the question. I called it 2 so that you can use this in conjunction with the method described above without getting compile errors
    namespace CustomControls
    {
        public class Literal2 : System.Web.UI.WebControls.Literal
        {
        }
    }
  3. Register the assembly/namespace for app_code in your aspx page by adding the following line to the top
    <%@ Register Namespace="CustomControls" Assembly="__code" tagprefix="web" %>
  4. Add an instance of the new control to your page:
    <web:Literal2 ID="literal2" runat="server" Text="test2" />
I tested this using visual studio and it all worked fine for me.

From : http://stackoverflow.com/questions/3003343/custom-control-in-asp-net-c-sharp

วันจันทร์ที่ 10 กุมภาพันธ์ พ.ศ. 2557

SQLServer การเพิ่มเลขที่ (record number) ในข้อมูล

การเพิ่ม Record number เป็นอีก column หนึ่งเพิ่มเข้ามา

        เขียนคำสั่งได้ดังนี้

SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0))AS RecNum ,* FROM table

        เราก็จะได้  field เพิ่มขึ้นอีก field ชื่อ RecNum เรียงตั้งแต่ 1,2......

         ตรง "SELECT 0" อาจจะเปลี่ยเป็น field ที่ต้องการเรียง

RecNum     field1       field2        field3
     1              006       toyata        red
     2              004       honda        blue
     3                ......
     4