แจกโค้ด C# วันสงกรานต์ 2008

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

แจกโค้ด C# วันสงกรานต์ 2551

วันนี้ฤกษ์งามยามดี วันสงกรานต์ ปี พ.ศ. 2551 อะไรจะดีสำหรับผมไปกว่าการเขียนรับใช้ท่านผู้อ่าน โดยแจกโค้ดแบบ Tricks & Tips ที่น่าสนใจและมีประโยชน์

 

เชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซต

เราอาจมองดาต้าเซตเป็นเหมือนฐานข้อมูลน้อยๆ ก็ได้ ดังนั้นมันจึงควรสนับสนุนสิ่งสำคัญอย่างหนึ่งของฐานข้อมูล นั่นคือการเชื่อมความสัมพันธ์หรือ relationship ซึ่งก็คือการนำตารางหนึ่งมาผูกกับอีกตารางหนึ่งนั่นเอง โค้ดสำหรับเชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซตในภาษา C# เป็นอย่างนี้

System.Data.DataColumn oParentColumn;
System.Data.DataColumn oChildColumn;
oParentColumn = oDS.Tables["Customers"].Columns["CustomerID"];
oChildColumn = oDS.Tables["Orders"].Columns["CustomerID"];

System.Data.DataRelation oRelation = 
[ic:ccc]new System.Data.DataRelation("CustomerOrders", 
[ic:ccc]oParentColumn, oChildColumn);
oDS.Relations.Add(oRelation);

 

สร้างวิวภายในดาต้าเทเบิ้ล

ใน ADO.NET มีดาต้าวิว (DataView) ทำหน้าที่กรองและเรียงข้อมูล วิธีสร้างวิวภายในดาต้าเทเบิ้ลในภาษา C# ทำอย่างนี้

System.Data.DataTable oTable = oDS.Tables["Customers"]; 
System.Data.DataView oView = new System.Data.DataView(oTable);

oView.RowFilter = "City='Berlin'";

 

โหลดไฟล์ XML เข้าสู่ดาต้าเซต

สิ่งที่ทำให้ดาต้าเซตทำงานได้คือ XML การโหลดไฟล์ XML เข้าสู่ดาต้าเซตจึงเป็นเรื่องสำคัญ โค้ดต่อไปนี้โหลดไฟล์ชื่อ customers1.xml เข้าสู่ดาต้าเซต

System.Data.DataSet oDS = new System.Data.DataSet();
oDS.ReadXml("http://localhost/sql2000/template/customers1.xml");

 

การสร้างเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการสร้างแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่อบันทึกข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้สร้างไฟล์ชื่อ MyTextFile.txt ไว้ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamWriter ของ .Net

static void WriteToFile()
{
    StreamWriter SW;
    SW = File.CreateText("c:\\MyTextFile.txt");
    SW.WriteLine("God is greatest of them all");
    SW.WriteLine("This is second line");
    SW.Close();
    Console.WriteLine("File Created SucacessFully");
}
 

การอ่านเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการอ่านแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่ออ่านข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้อ่านไฟล์ชื่อ MyTextFile.txt ซึ่งอยู่ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamReader ของ .Net

public class FileClass
{
    public static void Main()
    {
        ReadFromFile("c:\\MyTextFile.txt");
    }
    static void ReadFromFile(string filename)
    {
        StreamReader SR;
        string S;
        SR = File.OpenText(filename);
        S = SR.ReadLine();
        while (S != null)
        {
            Console.WriteLine(S);
            S = SR.ReadLine();
        }
        SR.Close();
    }
}

 
การแทรกข้อมูลเข้าสู่เท็กซ์ไฟล์

เราสามารถเขียนข้อมูลเพิ่มเข้าสู่เท็กซ์ไฟล์ (append) ได้โดยไม่ต้องทับข้อมูลเก่า คือของเก่าก็ยังอยู่ ของใหม่ก็ถูกเพิ่มต่อท้ายเข้าไป โค้ดเป็นดังนี้

public class FileClass
{
    public static void Main()
    {
        AppendToFile();
    }
    static void AppendToFile()
    {
        StreamWriter SW;
        SW = File.AppendText("C:\\MyTextFile.txt");
        SW.WriteLine("This Line Is Appended");
        SW.Close();
        Console.WriteLine("Text Appended Successfully");
    }
}

 

เซฟรูปภาพสามฟอร์แมต

โค้ดต่อไปนี้แสดงวิธีเซฟรูปภาพ โดยแสดงกรอบข้อความให้ผู้ใช้ป้อนพิมพ์ชื่อไฟล์และสามารถเลือก ฟอร์แมต ของไฟล์ได้สามแบบคือ bmp, gif และ jpg โปรดอ่านคำอธิบายที่แทรกไว้ในโค้ดครับ

private void button2_Click(object sender, System.EventArgs e)
{
   // แสดง SaveFileDialog เพื่อให้ผู้ใช้เซฟรูปภาพ
   // โดยกำหนดการทำงานไว้ที่ปุ่ม Button2
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
    saveFileDialog1.Title = "Save an Image File";
    saveFileDialog1.ShowDialog();

    // ตรวจสอบว่าชื่อไฟล์เป็นว่างเปล่าหรือไม่
    if (saveFileDialog1.FileName != "")
    {
        // เซฟภาพโดยใช้ FileStream ที่สร้างจากเมธอด OpenFile
        System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile();
      // เซฟไฟล์ให้ถูกฟอร์เมต โดยดูจากชนิดของไฟล์ที่ถูกเลือกใน dialog box
      // ค่าของ FilterIndex เริ่มจากหนึ่ง ไม่ใช่ศูนย์
        switch (saveFileDialog1.FilterIndex)
        {
            case 1:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Jpeg);
                break;

            case 2:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Bmp);
                break;

            case 3:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Gif);
                break;
        }

        fs.Close();
    }
}

 

จับข้อมูลใส่ DataGridView

โค้ดต่อไปนี้อ่านแถวจากตารางในฐานข้อมูลโดยอาศัย SqlDataAdapter ดึงข้อมูลมาไว้ใน DataSet แล้วนำมาผูกไว้กับ DataGridView โค้ดนี้เป็นวินฟอร์ม ส่วนที่ใส่ข้อมูลเขียนเป็นเมธอดแยกไว้ชื่อ LoadData()

public partial class Form1 : Form
{
    private SqlDataAdapter da;
    private SqlConnection conn;
    BindingSource bsource = new BindingSource();
    DataSet ds = null;
    string sql;

    public Form1()
    {
        InitializeComponent();
    }

    private void btnLoad_Click(object sender, EventArgs e)
    {
        LoadData();
    }

    private void LoadData()
    {
        string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
        conn = new SqlConnection(connectionString);
        sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";

        da = new SqlDataAdapter(sql, conn);
        conn.Open();
        ds = new DataSet();
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
        da.Fill(ds, "Orders");
        bsource.DataSource = ds.Tables["Orders"];
        dgv.DataSource = bsource;
    }
} 

 

อัพเดตฐานข้อมูลจาก DataGridView

คงดีแน่ๆ หากผู้ใช้แก้ไขข้อมูลบน DataGridView แล้วกดปุ่มๆ เดียวก็สามารถอัพเดตข้อมูลในฐานข้อมูลได้ โค้ดเป็นดังนี้

private void btnUpdate_Click(object sender, EventArgs e)
{
    DataTable dt = ds.Tables["Orders"];
    this.dgv.BindingContext[dt].EndCurrentEdit();
    this.da.Update(dt);
}

 

ยืนยันการลบ

โค้ดต่อไปนี้แสดงกรอบข้อความให้ผู้ใช้ยืนยันการลบข้อมูลจากฐานข้อมูล การผู้ใช้กดปุ่ม OK ข้อมูลแถวที่กำหนดจะถูกลบออกจากตาราง

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    if (!e.Row.IsNewRow)
    {
        DialogResult res = MessageBox.Show("Are you sure you want to delete this row?", "Delete confirmation",
                 MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (res == DialogResult.No)
            e.Cancel = true;
    }
}

 

กำหนดความกว้างโดยอัตโนมัติให้ DataGridView

โค้ดต่อไปนี้จะปรับความกว้างของคอลัมน์ใน DataGridView ให้มีขนาดพอดีกับความยาวของข้อมูลโดยอัตโนมัติ

private void btnResize_Click(object sender, EventArgs e)
{
    dgv.AutoResizeColumns();
    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

}

 

เลือกและทำแถบเน้นให้ DataGridView

โค้ดต่อไปนี้จะเลือกแถวที่สามของ DataGridView และทำแถบเน้น (Highlight) ด้วย

int rowToBeSelected = 3; // เลือกแถวที่สาม
if (dgv.Rows.Count >= rowToBeSelected)
{              
       //เนื่องจากค่าดรรชนีเริ่มจากศูนย์จึงต้องชดเชยโดยการลบหนึ่ง
        dgv.Rows[rowToBeSelected - 1].Selected = true; 
}

=================== จบ ===================

Post a comment or leave a trackback: Trackback URL.

ความเห็น

  • *~P_B~ b~P~*  On มิถุนายน 5, 2008 at 1:17 am

    เก่งจังเลยอ่า เรียนเองด้วย เราเรียนกะที่มหาลัย ยังไม่รุเรื่องเลย T^T

  • ชวลิต  On มกราคม 22, 2009 at 10:34 pm

    มีโค้ด C# แบบสำเร็จรูป แบบอื่นๆๆไหมคร้าบ อยากมากๆๆเลย

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: