คลังเก็บหมวดหมู่: Web Application

GrideViewDeleteRow


 

image

 

image

image

image

image

image

image

 

โค้ด:…

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Web;

   5: using System.Web.UI;

   6: using System.Web.UI.WebControls;

   7:  

   8: namespace WebApplication_GrideViewDeleteRow

   9: {

  10:     public partial class _Default : System.Web.UI.Page

  11:     {

  12:         //ชุดอ็อบเจ็กต์ของ Customer

  13:         List<Customer> lscus = null;

  14:         

  15:         protected void Page_Load(object sender, EventArgs e)

  16:         {

  17:         }

  18:  

  19:         protected void btLoadCustomer_Click(object sender, EventArgs e)

  20:         {

  21:             //สร้างอ็อบเจ็กต์ Customer

  22:             var cust = new Customer();

  23:  

  24:             //เรียกเมธอด loadCustomer() ซึ่งเป็นเมธอดจำลองข้อมูลตัวอย่าง

  25:             //นำไปเก็บไว้ที่ตัวแปรชุดอ็อบเจ็กต์ของ Customer

  26:             lscus = cust.loadCustomer();

  27:  

  28:             //พร้อมกับเก็บไว้ในอ็อบเจ็กต์ Session["cust"] ด้วย

  29:             Session["cust"] = cust.loadCustomer();

  30:  

  31:             //และผูกใส่ GridView1

  32:             this.GridView1.DataSource = lscus;

  33:             this.GridView1.DataBind();

  34:  

  35:         }

  36:  

  37:         protected void btAdd_Click(object sender, EventArgs e)

  38:         {

  39:             setCustomerList();

  40:             //เพิ่มอ็อบเจ็กต์ Customer ใหม่

  41:             //โดยกำหนดค่าจาก TextBox

  42:             

  43:             lscus.Add(new Customer

  44:             {

  45:                 CustomerID = int.Parse(TextBox1.Text),

  46:                 CustomerName = TextBox2.Text,

  47:                 CustomerAddree = TextBox3.Text,

  48:                 CustomerPhone = TextBox4.Text

  49:  

  50:             });

  51:  

  52:             this.GridView1.DataSource = lscus.ToList();

  53:             this.GridView1.DataBind();

  54:         }

  55:  

  56:       

  57:        

  58:         protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

  59:         {

  60:             //เมธอดกำหนดชุดอ็อบเจ็กต์ของ Customerไว้ที่ อ็อบเจ็กต์ Session["cust"]

  61:             setCustomerList();

  62:  

  63:             //เก็บ CustomerID ของแถวที่คลิก ยกเลิก

  64:             var id = this.GridView1.Rows[e.RowIndex].Cells[1].Text;

  65:  

  66:             //ดึงอ็อบเจ็กต์ Customer ที่ต้องการลบออกมา

  67:             //ด้วยภาษา LINQ

  68:             var q = lscus

  69:                 .Where(t => t.CustomerID == Convert.ToInt32(id))//Lamda expression

  70:                 .FirstOrDefault();

  71:  

  72:             if (q != null)

  73:             {

  74:                 //ก่อนลบอ็อบเจ็กต์ Customer

  75:                 //ใส่ค่าไว้ที่ TextBox ไว้ก่อน เผื่อว่าผู้ใช้งานต้องการตรวจสอบ แก้ไขอีกครั้ง

  76:                 TextBox1.Text = q.CustomerID.ToString();

  77:                 TextBox2.Text = q.CustomerName;

  78:                 TextBox3.Text = q.CustomerAddree;

  79:                 TextBox4.Text = q.CustomerPhone;

  80:  

  81:                 //ลบมันออกจากชุดอ็อบเจ็กต์ของ Customer 

  82:                 lscus.Remove(q);

  83:  

  84:                 //Binding ข้อมูลให้ GridView1 ใหม่

  85:                 this.GridView1.DataSource = lscus.ToList();

  86:                 this.GridView1.DataBind();

  87:             }

  88:         }

  89:  

  90:         private void setCustomerList()

  91:         {

  92:             //เก็บค่าตัวแปรชุดอ็อบเจ็กต์ของ Customerไว้ที่ อ็อบเจ็กต์ Session["cust"] 

  93:  

  94:             //ถ้าอ็อบเจ็กต์ Session["cust"] มีข้อมูลแล้ว

  95:             if (Session["cust"] != null)

  96:                 //เอาในอ็อบเจ็กต์ Session["cust"] กำหนดให้ ตัวแปรชุดอ็อบเจ็กต์ของ Customer

  97:                 lscus = Session["cust"] as List<Customer>;

  98:  

  99:             else //ถ้าอ็อบเจ็กต์ Session["cust"] ยังไม่ข้อมูล

 100:             {

 101:                 //สร้างตัวแปรชุดอ็อบเจ็กต์ของ Customer ใหม่

 102:                 lscus = new List<Customer>();

 103:  

 104:                 //แล้วใส่ชุดอ็อบเจ็กต์ของ Customer ใหม่ไว้กับ อ็อบเจ็กต์ Session["cust"] 

 105:                 Session["cust"] = lscus;

 106:             }

 107:         }

 108:     }

 109: }

 

แหล่งข้อมูลดาวน์โหลด:…

https://dl.dropbox.com/s/41enhxq3dr4mtg3/2011-08-01_WebApplication_GrideViewDeleteRow.zip?dl=1

โปรแกรมอ่านไฟล์ Outlook Item (*.msg)


image

 

มีผู้เรียนท่านหนึ่ง…

ในหลักสูตร GF150: Introduction to Silverlight 4 รุ่นที่ 1…

ได้สอบถามปัญหาการอ่านไฟล์อีเมล์ ของOutlook…

ผมเลยหาข้อมูล และทำตัวอย่างให้…

จึงเป็นที่มาของโปรแกรมอ่านไฟล์ Outlook Item (*.msg)

 

การทำงานของโปรแกรม:

เป็นโปรแกรมเว็บ ASP.NET ธรรมดา…

โดยจำลองว่า มีพาธสำหรับเก็บไฟล์ที่ผู้ใช้งาน คอย Upload ไฟล์ Outlook Item ขึ้นไปวางบนเซอร์ฟเวอร์…

ส่วน Upload ไม่ได้กล่าวถึง…

วิธีการนำไฟล์ Outlook Item ออกมา…

ทำได้ง่าย เพียงคลิกที่เมล์ในโปรแกรม Outlook แล้วลากไปวางข้างนอก เช่นที่ Desktop…

คุณก็จะได้ไฟล์ Outlook Item แล้ว…

image

 

โดยโปรแกรมนี้มีอยู่ว่า…

เมื่อคลิกปุ่ม Load mail

ไฟล์อีเมล์ Outlook Item จะถูกอ่านขึ้นบน TextBox ธรรมดา หนึ่งตัว…

โดยเนื้อหาอีเมล์ ผม Copy บทความเก่าๆ ไปทำเป็นเนื้อหาเมล์…เพื่อทดสอบดูว่า…มันสามารถอ่านออกมาครบทุกตัวอักษรใหม…

เนื่องจากผู้เรียนของผมติดปัญหา…นิดเดียวที่โปรแกรมเดิม…

อ่านเนื้อหาเมล์ไม่ครบ..

หน้าจอโปรแกรม เป็นดังนี้

image

สามารถอ่านครบทุกตัวอักษร…เนื้อหาเมล์ประมารณ 10 กว่าหน้า A4…

image

 

Folder Attachments…เป็นโฟล์เดอร์เก็บไฟล์แนบตามอีเมล์

image

 

หลังจากเปิดไฟล์อีเมล์ Outlook Item แล้วถ้าเมล์ดังกล่าวมีไฟล์แนบ…

มันจะแตกไฟล์ออกมาพร้อม…กองรอไว้ใน Folder Attachments…ดังนี้:

image

 

ถ้าเราดับเบิ้ลคลิกลงบนไฟล์อีเมล์ Outlook Item …และ…

image

บนเครื่องของเรามี โปรแกรม Outlook ติดตั้งอยู่ คุณจะสามารถเปิดเมล์ขึ้นมาอ่าน…

image

โค้ดสมบูรณ์:

ไปโหลดตัวอย่างโปรแกรมดู…

แหล่งข้อมูลอ้างอิง:

Reading an Outlook MSG File in C#: http://www.codeproject.com/KB/office/reading_an_outlook_msg.aspx?display=Print

ตัวอย่างโปรแกรม:
รันได้ทันทีบน VS2010

http://cid-7d608959d854cb28.office.live.com/embedicon.aspx/SourcesCode/2011/2011-06-10_WebApp_OutlookDataObject.zip

สร้างรายงานแผนภูมิกราฟด้วย Microsoft Chart Controls ตอนรู้จัก: Microsoft Chart Controls


 

สวัสดีครับ สำหรับบทความฉบับนี้ เป็นบทความที่เขียนให้ นิตยสาร CODE IT นานพอสมควร  และได้ขอบอนุญาตการเผยแพร่จาก CODE IT เรียบร้อยแล้ว คิดว่าน่าจะเป็นประโยชน์สำหรับเพื่อนๆ GreatFriends ติดตามได้เลยครับ…

 

เมื่อปลายปี 2008 ไมโครซอฟได้ออกชุดคอมโพเนนต์ (charting component) ในชื่อ Microsoft Chart Control ซึ่งมันอาศัยพื้นฐาน (based on) บน Dundas Chart Control version 5.5 สำหรับใช้พัฒนาบน .NET Framework 3.5 และVisual Studio 2008 และมันจะถูกใส่มาพร้อมใน .NET Framework 4.0 ซึ่งคอมโพเนนต์ดังกล่าวยอมให้นักพัฒนา สร้างรายงานที่มีแผนภูมิ และกราฟ ได้อย่างรวดเร็วโดยปราศจากการใส่โค้ดใดๆ และที่สำคัญเป็นเครื่องมือฟรีสำหรับสร้างแผนภูมิ และกราฟ บนเว็บเพจ (ASP.NET) หรือโปรแกรมบนวินโดวส์ (Windows Form) นักพัฒนาสามารสร้างรายงานแผนภูมิ หรือกราฟกับข้อมูลที่มีความซับซ้อนเช่น การวิเคราะห์เกี่ยวกับสถิติ หรือการเงิน ได้ง่ายขึ้น โดยสามารถสร้างแผนภูมิ และกราฟได้ทั้งในรูปแบบ 2 มิติ (2D) และ 3 มิติ(3D) สามารถประกาศแผนภูมิข้อมูล(chart data) แบบสแตติก(statically) หรือใช้การผูกข้อมูลแบบไดนามิก (dynamically) ก็ได้ และสำหรับการสร้างแผนภูมิ และกราฟบนเว็บแล้ว เซิร์ฟเวอร์คอนโทรล(server control) จะควบคุมการสร้างรูปภาพ ที่มีการอ้างอิงจากเพจ HTML ของเครื่องไคลเอ็นต์ ที่มีการใช้แท็ก <img/> เป็นองค์ประกอบ(element)เอาต์พุต โดยแท็ก <asp:chart/> คอนโทรลเป็นเซิร์ฟเวอร์คอนโทรลสนับสนุนความสามารถในการใช้แคชกับแผนภูมิรูปภาพ รวมทั้งบันทึกข้อมูลดังกล่าวลงดิสก์ โดยไม่ต้องมีเซิร์ฟเวอร์ซอฟต์แวร์อื่นๆ ที่จะติดตั้งและจะทำงานกับเพจมาตรฐาน ASP.NET และสนับสนุนการทำงานกับ AJAX ทำให้นักพัฒนาสามารถสร้างรายงานแผนภูมิกราฟแบบ Real Time ได้

การใช้งานชุดคอมโพเนนต์ดังกล่าว เครื่องคอมพิวเตอร์ของท่านผู้อ่านต้องมีทรัพยากรดังต่อไปนี้

 

สิ่งที่จำเป็น (Prerequisites)

และในบทความนี้ผู้เขียนได้ทำการดาวน์โหลดตัวอย่างโปรเจ็กต์ ที่มีทั้งเป็นเว็บแอพพิเคชัน และวิโดวส์แอพพลิเคชันจาก Microsoft Chart Controls Sample Project: http://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=1591

เพื่อเป็นการแนะนำคร่าวๆ ดังขั้นตอนต่อไปนี้

 

ขั้นตอนติดตั้งชุดคอมโพเนนต์ Microsoft Chart Controls

 

เปิดตัวอย่างโปรเจ็กต์เว็บแอพพลิเคชัน

เมื่อท่านผู้อ่านทำการติดตั้งคอมโพเนนต์ที่จำเป็นในขั้นตอนที่หนึ่ง, สอง และทำการดาวน์โหลดตัวอย่างมาไว้ในเครื่องเรียบร้อยแล้วลำดับต่อไปเราไปดูตัวอย่างโปรเจ็กต์ เพื่อศึกษาและปรับใช้งานกันต่อไป เราไปดูโปรเจ็กต์ที่เป็นเว็บกันก่อนครับ ให้ท่านผู้อ่านหยิบเครื่อง VS2008 ขึ้นมาแล้วปที่เมนู File=>Open Web Site… จากนั้นเลือกโฟลเดอร์ที่เราได้วางตัวอย่างโปรเจ็กต์ที่โหลดไว้แล้วก่อนหน้านี้ ในบทความนี้ผู้เขียนวางไว้ที่โฟลเดอร์ E:Download 2008Microsoft Chart ControlsWebSamplesWebSamples ดังรูปที่ 1

 

1

รูปที่ 1: เปิดตัวอย่างโปรเจ็กต์เว็บแอพพลิเคชัน

เมื่อท่านผู้อ่านเปิดโปรเจ็กต์ขึ้นมาเป็นที่เรียบร้อยแล้ว ทำการคลิกเมาส์ขวาลงบน ไฟล์ default.aspx แล้วเลื่อนเมาส์ไปเลือกเมนู Set As Start Page เพื่อกำหนดให้แสดงไฟล์ default.aspx เป็นเพจแรก จากนั้นรันโปรเจ็กต์ ท่านผู้อ่านจะได้หน้าแรกดังรูปที่ 2

 

2

รูปที่ 2: หน้าแรกที่จากการรันตัวอย่างโปรเจ็กต์เว็บ

ท่านผู้อ่านสามารถคลิกเมาส์ลงบนเมนูต่างๆ เพื่อท่องไปยังตัวอย่างของแผนภูมิกราฟต่างๆ ได้ ซึ่งมีดังนี้

 

ประเภทแผนภูมิ

 

3

รูปที่ 3

  • Bar and columns
  • Line
  • Area
  • Pie and Doughnut
  • Point
  • Range
  • Circular
  • Accumulation
  • Data Distribution
  • Financial

ตัวอย่างแผนภูมิกราฟแบบ Bar and columns แสดงดังรูปที่ 4

 

4

รูปที่ 4: ตัวอย่างประเภทแผนภูม และกราฟ

สนับสนุนการทำงานกับ AJAX ได้

 

5

รูปที่ 5: ทำงานกับ AJAX

รวมถึงสามารถสร้างกราฟแบบ Real Time ได้

 

6

รูปที่ 6: สร้างกราฟ Real Time

 

เปิดโปรเจ็กต์ตัวอย่างวินโดวส์แอพพลิเคชัน

การเปิดตัวอย่างโปรเจ็กต์ที่เป็นวินโดวส์แอพพลิเคชัน ให้ท่านผู้อ่านดับเบิ้ลคลิกเมาส์ลงบนไฟล์ WinFormsChartSamples.csproj ในโฟลเดอร์ที่ได้วางไฟล์ตัวอย่างโปรเจ็กต์ไว้ แล้วทำการรันโปรเจ็กต์ ท่านผู้อ่านจะได้หน้าจอดังรูป

 

รูปที่ 7: หน้าแรกจากการรันตัวอย่างโปรเจ็กต์วินโดวส์แอพพลิเคชัน

และท่านผู้อ่านสามารถท่องไปดูตัวอย่างแผนภูมิกราฟต่างๆ ตามเมนูบนหน้าจอ เช่นดังรูปที่ 7

 

8

รูปที่ 8: ตัวอย่างแผนภูมิกราฟต่างๆ

ในบทความนี้ ขอแนะนำชุดคอมโพเนนต์ Microsoft Chart Control เพียงคร่าวๆ เพียงเท่านี้ หวังว่าคงเป็นประโยชน์กับท่านผู้อ่านได้บ้าง ไม่มากก็น้อย บทความในตอนต่อไปพบกับการนำชุดคอมโพเนนต์ดังกล่าวไปประยุกต์ใช้งานกับข้อมูลจริง ตอนผูกข้อมูลบน Microsoft Chart Controls แล้วพบกันครับ

หากเกิดข้อผิดพลาดประการใดในบทความนี้ ผู้เขียนขอน้อมรับความผิดพลาดทั้งหมดนั้นไว้แต่เพียงผู้เดียว และยินดีน้อมรับฟังคำชี้แนะ เพื่อแก้ไข และเปลี่ยนแปลง ให้ดีขึ้นในครั้งต่อๆ ไป และหากท่านผู้อ่านพบปัญหาในการอ่านบทความ หรือปัญหาในด้านการโปรแกรมมิ่ง สามารถเข้าไปพบกับผู้เขียน และเพื่อนๆ บนชุมชนออนไลน์ http://www.greatfriends.biz เพื่อแลกเปลี่ยนประสบการณ์ สาระ ความรู้ กันและกัน และไปเยี่ยมกล่าวคำทักทายกันได้บน Blog ส่วนตัว: กรรมกรซอฟต์แวร์ http://janawat.spaces.live.com

 

แหล่งข้อมูลอ้างอิง:

 

ผู้เขียน


  ว่าที่รต. นุชิต อรรจนวรรจน์

  Microsoft MVP, Community Leader, CodeIT Columnist

  Blog: http://janawat.spaces.live.com, E-Mail: nuchitrwi@hotmail.com

  Nuchit’s Profile

ให้คำปรึกษา, ออกแบบ และพัฒนา Business Applications
Application Services Centers| Data Exchange Applications| Rich Internet Applications (RIA)
- Services Management - Data Exchange - AJAX
- Call Center - Data Transfer - Silverlight

VS2010 Chart Control DataBinding


เมื่อปลายปี 2008 ไมโครซอฟได้ออกชุดคอมโพเนนต์ (charting component) ในชื่อ Microsoft Chart Control ซึ่งมันอาศัยพื้นฐาน (based on) บน Dundas Chart Control version 5.5 สำหรับใช้พัฒนาบน .NET Framework 3.5  และVisual Studio 2008 และมันถูกใส่มาพร้อมใน .NET Framework 4.0 ซึ่งคอมโพเนนต์ดังกล่าวยอมให้นักพัฒนา สร้างรายงานที่มีแผนภูมิ และกราฟ ได้อย่างรวดเร็วโดยปราศจากการใส่โค้ดใดๆ และที่สำคัญเป็นเครื่องมือฟรีสำหรับสร้างแผนภูมิ และกราฟ บนเว็บเพจ (ASP.NET) หรือโปรแกรมบนวินโดวส์ (Windows Form)  นักพัฒนาสามารสร้างรายงานแผนภูมิ หรือกราฟกับข้อมูลที่มีความซับซ้อนเช่น การวิเคราะห์เกี่ยวกับสถิติ หรือการเงิน ได้ง่ายขึ้น โดยสามารถสร้างแผนภูมิ และกราฟได้ทั้งในรูปแบบ 2 มิติ (2D) และ 3 มิติ(3D) สามารถประกาศแผนภูมิข้อมูล(chart data) แบบสแตติก(statically) หรือใช้การผูกข้อมูลแบบไดนามิก (dynamically) ก็ได้ อ้างอิงจาก:> บทความที่ผู้เขียนเคยเขียนลงใน CodeIT ฉบับเดือน มีนาคม-เมษายน 2552

ภาพตัวอย่างกราฟ ส่วนหนึ่งของ Chart control

7

ขอบคุณภาพจาก CodeIT ฉบับเดือน มีนาคม-เมษายน 2552

ซึ่ง Chart control ใน VS2008 เรารู้จักในชื่อ Microsoft Chart Controls ซึ่งเราต้องดาวน์โหลดมาติดตั้งเพิ่มเติม มาใน VS2010 มันรวมมาให้ในเครื่องมือเรียบร้อยแล้วสามารถเรียกใช้งานได้ทันที และการใช้งานก็กระทำได้ง่ายๆ เช่นกัน ไปดูวิธีการใช้งานกันครับ

1. สร้างโปรเจ็กต์ ASP.NET Web Site ที่ Toolbox เราจะเห็น Chart control ดังรูป

1 

2. ทำการลากไปวางบน WebForm

2

3. ทำการผูกข้อมูลให้มัน โดยคลิกบนเมนู Chart Task จะเห็นมี 2 เมนูคือ Choose Data Source: และ Cahrt Type

3

4. เลือกเมนู Choose Data Source เพื่อกำหนดแหล่งข้อมูลให้มัน => เลือก SQL DataBase เพื่อเลือกแหล่งข้อมูลเป็น MS SQL ผ่าน ConnectioString นั่นเอง => คลิก OK

 4

5. เลือก DB Server และ DB Name => Next => Next

5 6

6. เลือกข้อมูลที่ต้องการ นำไปแสดงด้วยกราฟ ในที่นี้ผู้เขียนใช้ข้อมูลจาก View Category Sales for 1997 เป็น View รายงานการขายตามประเภทสินค้าในปี 1997 =>Next => คลิก Test Query เพื่อทดสอบดูข้อมูล => Finish

7 8

7. เมื่อกำหนด DataSource เรียบร้อย ให้เรากลับไปที่ Chart Task อีกครั้ง จะเห็นมีเมนูเพิ่มขึ้นมาอีก 2 เมนูคือ X Value Member และ Y Value Members

โดยกำหนดค่าต่างๆ ดังนี้:

  • Chart Type: ประเภทกราฟ ให้เป็น Column (กราฟแท่ง)
  • X Value Member = ใส่ฟิลด์ CategoryName
  • Y Value Members = ใส่ฟิลด์ CategorySales

9

8. ทดสอบรันเพื่อดูรายงานกราฟ เราจะได้รายงานดังรูป (ความสวยงามในบทความไม่ได้กล่าวถึง)

10

การสร้างรายงานด้วยกราฟใน VS2010 สามารถทำได้ง่ายด้วยการใช้งาน  Chart control ดังกล่าว และที่สำคัญไม่มีโค้ดอีกเช่นเคย ได้จากการกำหนดพรอเพอร์ตีด้วยการคลิก Next เท่านั้นครับ

 

แหล่งข้อมูลดาวน์โหลด:
http://cid-7d608959d854cb28.skydrive.live.com/embedicon.aspx/SourcesCode/01-13-2010_WebApplication1_Chart.zip 

แหล่งข้อมูลอ้างอิง:
CodeIT ฉบับเดือน มีนาคม-เมษายน 2552

ผู้เขียน:
nano_mvp_2009_1

Grid Row style (เปลี่ยนสี GridLine)


 

กำหนด style

<head id="Head1" runat="server">
<style type="text/css">
        .Grid_Row td
        {
            border-right: #7994cb 1px solid;
            border-top: #7994cb 1px solid;
            border-left: #7994cb 1px solid;
            border-bottom: #7994cb 1px solid;
        }
</style>
</head>

เอา style ไปใช้งาน (ผ่านหน้า design)

Grid_Row

เอา style ไปใช้งาน (ผ่านโค้ด Markup)

<asp:GridView ID="GridView4" runat="server">
    <RowStyle CssClass="Grid_Row" />
</asp:GridView>

ASP.Net Restore Data


 

Ref: ASP.Net Backup Data

Ref: LINQ to File and Directory

Download:

http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebBackData|_19-09-2008.zip

รูปที่ 1

ออกแบบหน้าจอ:

รูปที่ 2

รูปที่ 3 รูปที่ 4

รูปที่ 5 รูปที่ 6

รูปที่ 7

รูปที่ 8

รูปที่ 9

รูปที่ 10

 

Ref: ASP.Net Backup Data

Ref: LINQ to File and Directory

     private void getListBackupFiles()
   
{
       
var f = from fs in new System.IO.DirectoryInfo(Server.MapPath("BackData")).GetFiles()
               
select new
               
{
                   
Name = "BackData\" + fs.Name,
                   
fs.CreationTime,
                   
fs.Extension,
                   
fs.Length
               
};

        GridView1.DataSource = f;
       
GridView1.DataBind();
   
}

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
   
{
       
if (e.CommandName == "Select")
       
{
           
int xrow =int.Parse(e.CommandArgument.ToString());
           
HyperLink hyperLink2 = GridView1.Rows[xrow].Cells[1].FindControl("HyperLink2") as HyperLink;
           
RestaoreDB(hyperLink2.Text);
       
}
   
}

    private void RestaoreDB(string backFile)
   
{   

        ServerConnection connection = 
           
new ServerConnection(this.Session["Server"].ToString (),

                                   
this.Session["User"].ToString(),
                                   
this.Session["Password"].ToString());
       
Server svr = new Server(connection);

        Restore res = new Restore();
       
res.Database = txtDBname.Text.Trim();
       
res.Action = RestoreActionType.Database;

        res.Devices.AddDevice(Server.MapPath(backFile), DeviceType.File);
       
res.PercentCompleteNotification = 10;
       
res.ReplaceDatabase = true;
       
res.PercentComplete += new PercentCompleteEventHandler(res_PercentComplete);

        svr.KillAllProcesses(txtDBname.Text.Trim());

        res.Wait();
       
res.SqlRestore(svr);
   
}

    void res_PercentComplete(object sender, PercentCompleteEventArgs e)
   
{
       
//throw new NotImplementedException();
        Label1.Text = e.Percent.ToString() + e.Percent.ToString() + "% Restored up";

    }

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
   
{
       
if (e.Row.RowType == DataControlRowType.DataRow)
       
{
           
Button button1 =  e.Row.Cells[0].FindControl("Button1") as Button ;
           
button1.CommandArgument = e.Row.RowIndex.ToString();
       
}
   
}


 

Download:

http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebBackData|_19-09-2008.zip

 

Ref: ASP.Net Backup Data

Ref: LINQ to File and Directory

 

ASP.Net Backup Data


 

Download:

http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebBackData|_18-09-2008.zip

รูปที่ 1 รูปที่ 2

รูปที่ 3 รูปที่ 4

รูปที่ 5 รูปที่ 6

รูปที่ 7

 

ออกแบบหน้าจอ

รูปที่ 8 

References:

รูปที่ 9

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Microsoft.SqlServer.Management;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

public partial class _Default : System.Web.UI.Page 
{

   
protected void Page_Load(object sender, EventArgs e)
   
{
       
if (!IsPostBack)
       
{
           
HyperLink1.Visible = false;
       
}
   
}
   
protected void btBackupData_Click(object sender, EventArgs e)
   
{
       
string dbName = txtDBname.Text.Trim () + DateTime.Now.ToString("_ddMMyyyy_HH.mm.ss") + ".bak";
       
string destinationPath = "";

        destinationPath = Server.MapPath("BackData\" + dbName);
       
Backup sqlBackup = new Backup();

        sqlBackup.Action = BackupActionType.Database;
       
sqlBackup.BackupSetDescription = "ArchiveDataBase:" + DateTime.Now.ToShortDateString();
       
sqlBackup.BackupSetName = "Archive";

        sqlBackup.Database = txtDBname.Text.Trim () ;

        BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);

        ServerConnection connection = new ServerConnection(txtSvr.Text, txtUser.Text, txtPass.Text );
       
Server svr = new Server(connection);
       
Database db = svr.Databases[txtDBname.Text.Trim ()];

        sqlBackup.Initialize = true;
       
sqlBackup.Checksum = true;
       
sqlBackup.ContinueAfterError = true;

        sqlBackup.Devices.Add(deviceItem);
       
sqlBackup.Incremental = false;

        sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
       
sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;

        sqlBackup.FormatMedia = false;
       
sqlBackup.PercentComplete += new PercentCompleteEventHandler(sqlBackup_PercentComplete);
       
sqlBackup.SqlBackup(svr);

        HyperLink1.Visible = true ;
       
HyperLink1.Text = "BackData\" + dbName; ;
       
HyperLink1.NavigateUrl = "BackData\" + dbName;

    }

    void sqlBackup_PercentComplete(object sender, PercentCompleteEventArgs e)
   
{
       
Label1.Text = e.Percent.ToString() + "% backed up";
   
}
}

 

Download:

http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WebBackData|_18-09-2008.zip

 

กรองข้อมูลบน SqlDataSource


 

จาก บทความ – Export DataGridview to Excel Word http://greatfriends.biz?62894

Download source:
http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/ExportGridview2Excel|_16092998.zip

ถ้าต้องการกรองข้อมูลง่ายๆ แบบไม่ต้องโค้ดดิ้งหนักๆ สามาถกรองข้อมูลบน DataSource ดังจะขอกล่าวต่อไปนี้:

ถ้าค้นหา All จะแสดงข้อมูลสินค้สทั้งหมด

7

 

ถ้าต้องการค้นหาชื่อสินค้าที่มีตัวอักษร ch อยู่ จะแสดงรายการชื่อสินค้าที่มีตัวอักษร ch ออกมาทั้งหมด

8

 

ออกแบบหน้าจอ

 0

 

Configure Data source

1 

คลิก Query builder แล้วสร้าง View ตามต้องการ

2

 

ใส่เงื่อนไขรายงาน ใน Query นี้ลงไป แล้วคลิก OK

IF( @PdName <> ‘All’) –
BEGIN
    SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsOnOrder, ReorderLevel, CategoryName
    FROM Products INNER JOIN Categories ON
        Products.CategoryID = Categories.CategoryID
    WHERE (Products.ProductName LIKE ‘%’ + @PdName + ‘%’)
END
ELSE
BEGIN
    SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsOnOrder, ReorderLevel, CategoryName
    FROM Products INNER JOIN Categories ON
        Products.CategoryID = Categories.CategoryID
END

00

ระบบแจ้งว่า Query ผิด Syntax ไม่ต้องสนใจครับ ตอบ OK ผ่าน

6

 

เมื่อไดก็ตามที่เรามีคำสั่ง where ระบบจะกำหนด Parameter ให้ เช่นใน Query เราใช้ parameter  @PdName  ระบบจะกำหนดชื่อ Parameter เป็น PdName

4 

เบื้องหลังมันจะเจนโค้ดให้ดังนี้:

xx2

 

โค้ด Behind:
public partial class _Default : System.Web.UI.Page 
{

   
protected void Page_Load(object sender, EventArgs e)
   
{
       
if (!IsPostBack)
       
{
          
bindingData();
       
}
   
}

    private void bindingData()
   
{
       
SqlDataSource1.SelectParameters["PdName"].DefaultValue = TextBox1.Text.Trim();
         
GridView1.DataBind();
   
}

    protected void btSearch_Click(object sender, EventArgs e)
   
{
      
bindingData();
   
}
}

 

Download source:
http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/ExportGridview2Excel|_16092998.zip

ASP.NET to Upload PowerPoint (*.mht) to Presentation


 

Download Source Code[VS2008]

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" Width="400px" />
        &nbsp;<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
            Text="Send" />
        <br />
           <iframe id="frame1" scrolling="auto"  width ="100%" height ="100%" runat="server"> </iframe>

    </div>
    </form>
</body>
</html>

 

protected void Button1_Click(object sender, EventArgs e)
   
{
       
if (FileUpload1.PostedFile!=null  )
       
{
           
FileUpload1.PostedFile.SaveAs(Server.MapPath("Presentation/") + FileUpload1.FileName );
           
frame1.Attributes["src"] = "Presentation/"+ FileUpload1.FileName;
       
}
   
}

LINQ to File and Directory


 

Source Code(C#): [VS2008]

Source Code(VB.Net)

11

22

Code:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using System.IO;

public partial class _Default : System.Web.UI.Page 
{

   
protected void Page_Load(object sender, EventArgs e)
   
{
       
//ดึงชื่อ Folder ทั้งหมดใน Root [Server.MapPath (".")]

        var folders = from folder in new DirectoryInfo(Server.MapPath (".")).GetDirectories()
                     
select folder;

        //แหล่งข้อมูลของ GridView1 คือ folders
        GridView1.DataSource = folders;

       
//ผูกข้อมูลชื่อ Folder ให้กับ GridView1
        GridView1.DataBind();

        //ลูบตรวจสอบ file ข้างใน Folder
        foreach (DirectoryInfo dir in folders)

       
{
           
//ดึงชื่อไฟล์ออกมา จาก Folder นั้นๆ
            var files = from file in new DirectoryInfo(Server.MapPath (dir.ToString ())).GetFiles()
 
                       
select file;

            //แสดงป้ายชื่อ Folder
            Literal1.Text +="Folder:=>"+ dir.Name + "<BR>";

           
int xf = 0;//ป้ายลำดับไฟล์
            foreach (FileInfo fs in files)

           
{
               
xf++;//นับครั้งละหนึ่ง
                Literal1.Text += xf.ToString ()+ ": "+ fs.Name + " " + fs.Length + "<BR>";
//แสดงชื่อไฟล์ใน Folder ออกมา
            }
           
       
}
             

    }
}

Ref: LINQ and File Directories

Set web.config culture เป็น th-TH


ตอบคำถามเพื่อสมาชิก GF
http://greatfriends.biz?78559

clip_image001

ขั้นตอน set culture

1. ถ้า Project web ยังไม่เป็น Virtual Directory ให้สร้างตามขั้นตอนดังรูป

clip_image002

2. เมื่อได้ Virtual Directory แล้วให้เปิด IIS

clip_image003

3. เข้า Edit Configuration ตามรูป

clip_image004

4.Tab Application:>Globalization sttings set ค่าตามรูป

clip_image005

จะได้บรรทัดนี้ครับ
….
<globalization culture="th-TH" uiCulture="th" />
….

 

javascript vista menu


ตอบคำถามเพื่อนสมาชิก GF

ถามหน่อยว่าทำเเบบนี้ได้ไหม
http://greatfriends.biz?78383

menu ที่เห็น บน http://mic99.spu.ac.th/ เป็น javaScript ครับ เลียนแบบ menu บน vista ผมเคยเห็นบน theme ของ CMS ยี่ห้อหนึ่งจำไม่ได้แล้ว จำได้แค่ว่าเป็น PHP

ถ้าต้องการดู Javascript ว่าเขียนอย่างไร ทำตาม ขั้นตอน 1 – 7 เลยครับ

1.

1

2.

2 

3.

3

4. ไฟล์ JavaScript และ StyleSheet

4

5.มาดูว่าเรียกใช้งานอย่างไร เปิดดูไฟล์ .html เลยครับ ต้องการ Show รูปอะไร เปลี่ยนเอาเองเลยครับ

5 

6.

6

7.

7

Query Excel to DataGrid in VS. 2003


 

ตอบคำถามเพื่อนสมาชิก GF p’ Nano please help me http://greatfriends.biz?77616
Download Demo public_small WebAppQueryExcel_VS2003.zip

        private void Button1_Click(object sender, System.EventArgs e)
       
{
           
string path = Server.MapPath ("Book1.xls");
           
           
System.Data.OleDb.OleDbConnection conn = 
               
new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=’"+path+"’; Extended Properties=’Excel 8.0;HDR=Yes;’;");

            conn.Open();
           
string sql = "Select * FROM [Sheet1$]";
           
DataSet ds = new DataSet ();
           
System.Data.OleDb.OleDbDataAdapter da = new OleDbDataAdapter(sql,conn);
           
da.Fill (ds);

            if (ds.Tables[0].Rows.Count >0)
           
{
               
DataGrid1.DataSource = ds;
               
DataGrid1.DataBind ();
           
}

        }

 
 
 
 
 

GridView Master Detail


ใช้กับ

Microsoft Visual Studio 2008 Professional Edition

Microsoft SQL Server 2005 Express

AJAX 1.0-Enable ASP.Net 2.0

สาธารณะDownload: GridViewMasterDetail.zip

บทความนี้ นำเสนอการทำรายงานแบบ Master Detail ง่ายๆ ด้วย GridView กันครับ มีหลักการง่ายๆ ครับ คือใช้ GridView  ซ้อนกัน 2 อัน และใช้ AJAX มาช่วยเพื่อการแสดงผลให้น่าใช้งานมากขึ้น

MasterDetail GridView ซ้อนกัน 2 อัน เป็นรายงาน Category และ Product

clip_image002

 

ออกแบบโปรแกรมกัน

1. New Project ด้วย AJAX 1.0-Enabled ASP.NET 2.0

clip_image003

2. ลาก GridView  มาวาง 1 อัน

clip_image004

3. จัด Auto Format ตามต้องการ

clip_image005

4. กำหนดให้มันสลับสี Row

clip_image006

5. กำหนด Connection string เอก base Northwind

clip_image007

6. เลือกตาราง Categorics

clip_image008

7. ลบ Column ให้เหลือ 2 Column แล้วทำการ Convert เป็น TemplateField

clip_image009

8. Edite TemplateField

clip_image010

9. Edite TemplateField CategoryID ก่อน โดยเลือนเมาส์มาเลือก ItemTemplate

clip_image011

10. ลาก ImageButton มาวาง

clip_image012

11. กำหนด ImageUrl เลือกรูป Plus.gif

clip_image013

12. จะได้ผลดังนี้

clip_image014

13. มา Edit ItemTemplate Categoryname

clip_image015

14. บน Label2 Edit DataBindings

clip_image016

15. ลาก Label มาเพิ่มอีก 2 อันเพื่อ Show ข้อมูล categoryName และ Detail

clip_image017

16.

clip_image018

17. กำหนด DataBindings ตามรูป

clip_image019

18. เรียบร้อยในส่วน ข้อมูล Category

clip_image020

19. จากนั้นมาทำในส่วนของรายงานข้อมูลสินค้าที่อยู่ใน category ID นั้นๆ โดยลาก GridView มาวางเพิ่มอีก 1 อันดังรูป แล้วจัด Format ตามใจชอบ

clip_image021

20. กำหนด Data Source สำหรับ GridView แสดงรายงาน Product ตั้งชื่อเป็น SqlDataSource_Product  เพราะเราต้องใช้ใน Code behind

clip_image022

21. เลือก Field ตามต้องการครับ

clip_image023

22. กำหนด รายการ Product ตาม CategoryID operator เป็น = Source None เราจะผ่านเป็น Parameter ครับ

clip_image024

23.

clip_image025

24.

clip_image026

25. ใส่ Caption= Product Detail

clip_image027

26. หลังจาก ออกแบบเรียบร้อย หน้าตาเป็นดังรูป 

clip_image028

27. กำหนด CommandName บน ImageButton1 เป็น showPro

clip_image029

28. กำหนด DataKeyName

clip_image030

29. ทดสอบรันเพื่อดูหน้าตารายงาน

clip_image031

30.

clip_image032

31. ใช้งาน Ajax ลาก UpdatePanel และ UpdateProgrees มาวาง ใต้ ScriptManager

clip_image033

32. ลากรูป indicator (loading.gif) มาวางบน UpdateProgress และพิมพ์ Loading… เพื่อหลอกผู้ใช้งานว่ากำลังทำงานอยู่ ในขณะที่ Ajax ทำงาน

clip_image034

33. ลาก GridView มาวางใน Update Panel

clip_image035

34. แก้ไข HeaderText

clip_image036

35. รันโปรแกรม ทดสอบรายงาน

clip_image037

 

Code Behind:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    private int index = 0;
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {      

        if (e.CommandName == "showPro")
        {
            ImageButton im = (ImageButton)GridView1.Rows[int.Parse(e.CommandArgument.ToString())].Cells[0].FindControl("ImageButton1");
            if (im.ImageUrl == "~/Images/Plus.gif")
            {
                //เก็บ DataKeys ซึ่งคือ CategoryID
                string catId = GridView1.DataKeys[int.Parse(e.CommandArgument.ToString())].Value.ToString();
                //เก็บ DataSource ของ Product
                SqlDataSource sds = (SqlDataSource)GridView1.Rows[int.Parse(e.CommandArgument.ToString())].FindControl("SqlDataSource_Product");
                //GridView รายการ Product
                GridView gv = (GridView)GridView1.Rows[int.Parse(e.CommandArgument.ToString())].FindControl("GridView2");
                //pass parameter CategoryID ให้ SqlDataSource_Product
                sds.SelectParameters[0].DefaultValue = catId;
                //Show GridView รายการ Product
                gv.Visible = true;
                //set รูป Image เป็น Minus
                im.ImageUrl = "~/Images/Minus.gif";

            }
            else
            {
                //เก็บ DataSource ของ Product
                GridView gv = (GridView)GridView1.Rows[int.Parse(e.CommandArgument.ToString())].FindControl("GridView2");
                //ซ่อน GridView รายการ Product
                gv.Visible = false;
                //set รูป Image เป็น Plus
                im.ImageUrl = "~/Images/Plus.gif";
            }

        }

    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            ImageButton im = (ImageButton)e.Row.Cells[0].FindControl("ImageButton1");
            //set CommandArgument ให้ ImageButton
            im.CommandArgument = index.ToString();
            index = index + 1;
        }
    }
}

 Source Code

GridViewMasterDetail.zip สาธารณะ

ดาวน์โหลด

Autonumber GridView


 

1

2

 

<asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False"
            DataKeyNames="ProductID,ProductName"
            DataSourceID="SqlDataSource1"
            BackColor="White"
            BorderColor="#3366CC"
            BorderStyle="None"
            BorderWidth="1px"
            CellPadding="4"
            onselectedindexchanged="GridView1_SelectedIndexChanged">
            <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
            <RowStyle BackColor="White" ForeColor="#003399" />
            <Columns>
                <asp:TemplateField>
                    <HeaderTemplate>NO</HeaderTemplate>
                    <ItemTemplate><%#Container.DataItemIndex+1%>  </ItemTemplate>                       
                 </asp:TemplateField> 
                <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                <asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" SortExpression="QuantityPerUnit" />
                <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
                <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
                <asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" />
            </Columns>
            <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
            <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
            <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
            <AlternatingRowStyle BackColor="#CCFFFF" />
        </asp:GridView>

How do retrieve multi DataKey value


 

กำหนด DataKeyName เป็น Array ดังนี้:


<asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False"
         
  DataKeyNames="ProductID,ProductName"
            DataSourceID="SqlDataSource1"
            BackColor="White"
            BorderColor="#336666"
            BorderStyle="Double"
            BorderWidth="3px"
            CellPadding="4"
            GridLines="Horizontal"
            onselectedindexchanged="GridView1_SelectedIndexChanged">

ดึง DataKey ไปใช้งาน:


protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    int _index = GridView1.SelectedIndex;
    string strProID = GridView1.DataKeys[_index].Values[0].ToString(); //ProductID
    string strProName = GridView1.DataKeys[_index].Values[1].ToString(); //ProductName

    Session["proid"] = strProID ;
    Session["proname"] = strProName ;  
}

 

Exports GridView and Image to Excel


MS Visual Studio 2008 Professional Edition
MS SQL Server 2005 EXPRESS

1.

1

2.

2

3.

3

4.

4

5.

5

6.

6

ออกแบบหน้าจอ

7.

 image

8.

image 

image

9.

image

image

10.

image

11.

image

12.

image

13.

image

14.

image

15.

image

16.

image

17.

image

18.

image

19.

image

20.

image

21.

image

22.

image

23.

image

24.

image

25.

image

26.

image

27.

image

28.

image

29.

image

30.

image

31.

image

<ItemTemplate>
   <asp:Image ID="Image1" runat="server" ImageUrl=’<%# Eval("PhotoPath", "{0}") %>‘ />
</ItemTemplate>

32.

image

33.

image

34.

image

35.

image 

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text=’<%# Eval("EmployeeID", "{0}") %>’></asp:Label>
&nbsp;<br />
<asp:Label ID="Label2" runat="server" Text=’<%# Eval("FirstName", "{0}") %>’></asp:Label>
&nbsp;<br />
<asp:Label ID="Label3" runat="server" Text=’<%# Eval("LastName", "{0}") %>’></asp:Label>
&nbsp;<br />
<asp:Label ID="Label4" runat="server" Text=’<%# Eval("Title", "{0}") %>’></asp:Label>
</ItemTemplate>

36.

image

37.

image

38.

image

39.

image

40.

image

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType .DataRow)

{

Image img = (Image)e.Row.Cells[0].FindControl("Image1");

System.Drawing.Bitmap b = new System.Drawing.Bitmap(Server.MapPath(img.ImageUrl));

string strUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +

HttpContext.Current.Request.ApplicationPath + "/" + img.ImageUrl;

img.ImageUrl = strUrl;

if (Convert.ToInt32(this.Session["xwid"]) < b.Width)

this.Session["xwid"] = b.Width;

e.Row.Cells[0].Width = Convert.ToInt32(this.Session["xwid"]);

e.Row.Cells[0].Height = b.Height;

}

}

//=========================================================//

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

string ImgUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +

HttpContext.Current.Request.ApplicationPath + "/Logo/logo.gif";

ImLOGO.Src = ImgUrl;

}

}

41.

image

42.

xx

 

Code markup:

//=========================================================//

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

<html xmlns="http://www.w3.org/1999/xhtml"&gt;

<head runat="server">

<title>Untitled Page</title>

<style type="text/css">

.style1

{

width: 100%;

}

</style>

</head>

<body>

<form id="form1" runat="server">

<table cellpadding="2" class="style1" id="table_Data" runat ="server" width= "500">

<tr>

<td height="50">

<h2><b>Exports GridView and Image to Excel</b></h2>

</td>

</tr>

<tr>

<td height="100">

<img id = "ImLOGO" runat ="server" src="Logo/logo.gif" /></td>

</tr>

<tr>

<td width="500">

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"

CellPadding="4" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1"

ForeColor="#333333" GridLines="None"

onrowdatabound="GridView1_RowDataBound">

<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

<RowStyle BackColor="#E3EAEB" />

<Columns>

<asp:TemplateField HeaderText="Detail" SortExpression="Title">

<EditItemTemplate>

<asp:TextBox ID="TextBox1" runat="server" Text=’<%# Bind("Title") %>’></asp:TextBox>

</EditItemTemplate>

<ItemTemplate>

<asp:Label ID="Label1" runat="server" Text=’<%# Eval("EmployeeID", "{0}") %>’></asp:Label>

&nbsp;<br />

<asp:Label ID="Label2" runat="server" Text=’<%# Eval("FirstName", "{0}") %>’></asp:Label>

&nbsp;<br />

<asp:Label ID="Label3" runat="server" Text=’<%# Eval("LastName", "{0}") %>’></asp:Label>

&nbsp;<br />

<asp:Label ID="Label4" runat="server" Text=’<%# Eval("Title", "{0}") %>’></asp:Label>

</ItemTemplate>

<HeaderStyle HorizontalAlign="Left" />

<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" />

</asp:TemplateField>

<asp:TemplateField HeaderText="Photo" SortExpression="PhotoPath">

<EditItemTemplate>

<asp:TextBox ID="TextBox2" runat="server" Text=’<%# Bind("PhotoPath") %>’></asp:TextBox>

</EditItemTemplate>

<ItemTemplate>

<asp:Image ID="Image1" runat="server"

ImageUrl=’<%# Eval("PhotoPath", "{0}") %>’ />

</ItemTemplate>

<HeaderStyle HorizontalAlign="Left" />

<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" />

</asp:TemplateField>

</Columns>

<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />

<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />

<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />

<EditRowStyle BackColor="#7C6F57" />

<AlternatingRowStyle BackColor="White" />

</asp:GridView>

</td>

</tr>

</table>

<asp:SqlDataSource

ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"

SelectCommand="SELECT [EmployeeID], [FirstName], [LastName], [Title], [PhotoPath] FROM [Employees]">

</asp:SqlDataSource>

<asp:Button ID="btExports" runat="server" onclick="btExports_Click"

Text="Exports" />

</form>

</body>

</html>

 

Code Behind:

//=========================================================//

using System;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.IO;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

string ImgUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +

HttpContext.Current.Request.ApplicationPath + "/Logo/logo.gif";

ImLOGO.Src = ImgUrl;

}

}

protected void btExports_Click(object sender, EventArgs e)

{

this.EnableViewState = false;

GridView1.AllowSorting = false;

GridView1.AllowPaging = false;

Response.Clear();

System.IO.StringWriter tw = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);

HtmlForm frm = new HtmlForm();

Response.ContentType = "application/vnd.ms-excel";

Response.AddHeader("content-disposition", "attachment;filename=GridViewImage.xls");

Response.Charset = "";

Controls.Add(frm);

frm.Controls.Add(table_Data);

frm.RenderControl(hw);

Response.Write(tw.ToString());

Response.End();

GridView1.AllowSorting = true;

GridView1.AllowPaging = true;

}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType .DataRow)

{

Image img = (Image)e.Row.Cells[0].FindControl("Image1");

System.Drawing.Bitmap b = new System.Drawing.Bitmap(Server.MapPath(img.ImageUrl));

string strUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +

HttpContext.Current.Request.ApplicationPath + "/" + img.ImageUrl;

img.ImageUrl = strUrl;

if (Convert.ToInt32(this.Session["xwid"]) < b.Width)

this.Session["xwid"] = b.Width;

e.Row.Cells[0].Width = Convert.ToInt32(this.Session["xwid"]);

e.Row.Cells[0].Height = b.Height;

}

}

}

MVC Framework


MVC ย่อมาจาก Model-View-Controller ลักณะเป็นสถาปัตยกรรมซอฟแวร์ (architecture) กำเนิดขึ้นในภาษาสมอลทอล์ค (Smalltalk) มีการแบ่งระบบออกเป็น 3 ส่วนหลัก ๆ ได้แก่

  1. Model (Data model)
  2. View (User interface)
  3. Controller (Process)

Model-View-Controller pattern 
ภาพจาก:
http://java.sun.com/blueprints/patterns/MVC-detailed.html

Figure 1: Model-View-Controller pattern(1)

 

mvcfigure1 
ภาพจาก:
http://cristobal.baray.com/indiana/projects/mvc.html

Figure 2: Model-View-Controller pattern(2)

 

Model

  • ประกอบด้วย class ที่เชื่อมต่อกับ RDBMS มีการติดต่อกับ Active Record เพื่อช่วยจัดการงานด้าน Database เช่น ตรวจสอบความถูกต้อง(validation), ความสัมพันธ์ระหว่างฐานข้อมูล(association), transactions เป็นต้น
  • จัดการระหว่าง Object และ Database โดยที่ Developer ไม่ต้องยุ่งยากกับการใช้คำสั่ง SQL command

View

  • เป็นส่วนที่ติดต่อกับผู้ใช้ (User interface) หรือรายงานผลลัพธ์จากกระบวนการของProcess

Controller

  • เป็นส่วนที่ติดต่อการทำงานระหว่างผู้ใช้และโปรแกรม เพื่อจัดการและเปลี่ยนแปลงวิวให้สามารถตอบสนองต่อผู้ใช้ตามความต้องการ มีการติดต่อกับ Database ด้วย Model และแสดงผลข้อมูลผ่านทาง View

ประโยชนของ MVC

  • ทำให้ง่ายต่อการแก้ไขโปรแกรม
  • สามารถโต้ตอบกับผู้ใช้ด้วยการแสดงผลที่หน้าจอหลากหลายของข้อมูลเดียวกัน หรือสามารถเปลี่ยนแปลง รูปแบบหรือโครงสร้างข้อมูล ได้โดยที่ View ยังคงเดิม
  • สนับสนุนการนำ Source code มาใช้ใหม่และช่วยให้นักพัฒนามุ่งสนใจกับหน้าตาแอพพลิเคชัน(View) เดียว โดยไม่สนหน้าตาแอพพลิเคชันส่วนอื่น
  • การเปลี่ยนแปลงส่วนใดส่วนหนึ่งของคอมโพเนนต์จะไม่ส่งผลกระทบต่อคอมโพเนนต์อื่น

 

อ้างอิง และข้อมูลเพิ่มเติม:
http://weblogs.asp.net/scottgu

http://msdn2.microsoft.com

ASP.NET Model View Controller Applications
http://cristobal.baray.com/indiana/projects/mvc.html
http://java.sun.com/blueprints/patterns/MVC-detailed.html

 

การติดตั้ง DotNetNuke 4.7.0


DotNetNuke เป็น Content Management System (CMS) ตัวหนึ่งของตระกูล Microsoft.Net พัฒนาโดย ASP.Net (VB.Net) ซึ่งเป็นลักษณะ Open Source

CMS เป็นระบบที่นำมาช่วยในการสร้างและบริหารเว็บไซต์แบบสำเร็จรูป โดยในการใช้งาน CMS นั้นผู้ใช้งานไม่ต้องมีความรู้ในด้านการเขียนโปรแกรม ก็สามารถสร้างเว็บไซต์ได้ โดยที่ตัว CMS เองมีโปรแกรมประยุกต์ (Module) พร้อมใช้งานอยู่ภายในมากมายเช่น

 

โปรแกรมประยุกต์ (Module)

  • ระบบจัดการบทความและข่าวสาร(News and Story)
  • ระบบจัดการบทวิจารณ์ (Review)
  • ระบบจัดการสมาชิก(Mamber)
  • ระบบสืบค้นข้อมูล(Search)
  • ระบบจัดการไฟล์ดาวน์โหลด(Download)
  • ระบบจัดการป้ายโฆษณา(Banner)
  • ระบบการวิเคราะห์และตรวจสอบสถิติความนิยมในเว็บไซต์ (Analysis, Tracking and Statistics)

 

ปัจจุบันซอฟต์แวร์ที่ใช้สร้าง CMS มีหลายตัว เช่น

  • ค่ายอื่น: PostNuke, PHP-Nuke, MyPHPNuke, Mambo, eNvolution, MD-Pro, XOOPs, OpenCMS, Plone, JBoss, Drupal เป็นต้น
  • ค่าย Microsoft: DotNetNuke เป็นต้น

 

การประยุกต์ใช้ CMS

  • ระบบ CMS สามารถนำมาประยุกต์ในงานต่างๆ หลากหลาย ตัวอย่างการนำซอฟต์แวร์ CMS มาประยุกต์ใช้งาน เช่น
  • การนำ CMS มาใช้ในการสร้างเว็บไซต์สถาบันการศึกษา ธุรกิจบันเทิง หนังสือพิมพ์ การเงิน การธนาคาร หุ้นและการลงทุน อสังหาริมทรัพย์ งานบุคคล งานประมูล สถานที่ท่องเที่ยว งานให้บริการลูกค้า
  • การนำ CMS มาใช้ในหน่วยงานของรัฐ อาทิเช่น งานข่าว งานประชาสัมพันธ์ การนำเสนองานต่างๆ ขององค์กร
  • การใช้ CMS สร้างไซต์ ส่วนตัว ชมรม สมาคม สมาพันธ์ โดยวิธีการแบ่งงานกันทำ เป็นส่วนๆ ทำให้เกิดความสามัครคี ทำให้มีการทำงานเป็นทีมเวิร์คมากยิ่งขึ้น
  • การนำ CMS มาใช้ในการสร้างเว็บไซต์สำหรับธุรกิจ SME โดยเฉพาะสินค้าหนึ่งตำบลหนึ่งผลิตภัณฑ์ หรือ OTOP กำลังได้รับความนิยมสูง
  • การนำ CMS มาใช้แทนโปรแกรมลิขสิทธิ์ อื่นๆ เพื่อประหยัดค่าใช้จ่าย และง่ายต่อการพัฒนา
  • การใช้ CMS ทำเป็น Intranet Web Site สร้างเว็บไซต์ใช้ภายในองค์กร

จาก http://www.cmsthailand.com/modules/sections/index.php?op=viewarticle&artid=1

 

Download DotNetNuke

1. เข้าไป Downloads DotNetNuke ที่ http://www.dotnetnuke.com โดยสมัครสมาชิก แล้ว Logon ระบบ

clip_image002[4]

 

2. Download version DotNetNuke 4.7.0 (version ล่าสุด)

clip_image004[4]

 

3. กดปุ่ม Save แล้วรอสักครู่…

clip_image005[9]

 

ติดตั้ง DotNetNuke 4.7.0

1. เมื่อทำการ Download เรียบรอย ให้แตก Zip DotNetNuke_04.07.00_Install.zip ไปไว้ใน Folder ที่ต้องการ

เช่นในบทความ: D:Downloads 2008DNN0407DNN0407 จากนั้นทำการสร้าง Virtual Directory โดยคลิกขวาบน Folder DNN0407 => Properties => Web Sharing

clip_image007[4]

 

2. คลิก Share this folder แล้วเลือกดังรูปแล้วกด OK

clip_image009[4]

 

3. OK.

clip_image011[4]

 

4. เปิด WebServer (IIS)

clip_image013[4]

 

5. ASP.Net=> 2.0

clip_image015[4]

 

6. เปลี่ยน Config file โดย Rename web.config => web.config.old และ release.config => web.config

clip_image017[4]

 

7. เปิดไฟล์ web.config แก้ไข Connection String

clip_image019[4]

 

8. กำหนด Permission ให้ user NETWORK SERVICE ให้ Folder DotnetNuke ของเรา

clip_image021[4]

 

9. Allow เพื่อให้ User network service สามารถ read-write ไฟล์ใน folder DNN0407 เช่น สามารถ write ไฟล์ config ได้ตอนติดตั้ง

clip_image023[4]

 

10. กลับไปที่ WebServer เพื่อรัน Web  โดยเลือก Default.aspx=> Browser

clip_image025[4]

 

11. จะ Start IE run Page Default.aspx

clip_image027[4]

 

12. จะถาม User กรณีที่เราไม่ได้ Enable anonymous access ให้ทำการ ป้อน User ด้วย User Local Machine (user  ใน Windows)

clip_image029[4]

 

13. หรือทำการ Enable anonymous access ดังรูป

clip_image031[4]

 

14. เมื่อเข้าหน้า Web ครั้งแรกจะเข้าหน้าติดตั้ง ในหน้าติดตั้งเลือก Custome

clip_image033[4]

 

15. Next

clip_image035[4]

 

16. กด Next (จะแสดง config  ตาม web.config)

clip_image037[4]

 

17. Installing…

clip_image039[4]

 

18. Next

clip_image041[4]

 

19. set Host User (Super User)

clip_image043[4]

 

20. Add Module ตามต้องการ แล้ว Next

clip_image045[4]

 

21. Next

clip_image047[4]

 

22. Next

clip_image049[4]

 

23. Next

clip_image051[4]

 

24. Set Administrator user , Next

clip_image053[4]

 

25. เรียบร้อยแล้ว… คลิก Finished

clip_image055[4]

 

26. Default DotnetNuke web site

clip_image057[4]

 

27. Logon ด้วย super user เพื่อเข้าไปจัดการ CMS ของเรา

clip_image059[4]

 

28.

clip_image061[4]

 

29. Show Control Panel

clip_image063[4]

 

 

Add Module Text/HTML

1.

clip_image065[4]

 

2.

clip_image067[4]

 

3. แสดงข้อมูลน้ำมัน จากปตท. http://www.pttplc.com/th/ptt_core.asp?page=nc_oi

clip_image069[4]

 

4. จากข้อ 2. คลิก Edit Text ใส่ Link นี้ลงไปครับ

<iframe frameborder=0 width="187" height="270" scrolling="no" src="http://www.pttplc.com/th/oilprice.asp"></iframe&gt;

clip_image071[4]

 

5. เมนูราคาน้ำมัน เรียบร้อยครับ

clip_image073[4]

 

ข้อมูลเพิ่มเติม