สิ่งที่จำเป็น (Prerequisites)
- Microsoft Visual Studio 2008 (C#)
- SQL Server (2005,2008) Express
Download source:
หากว่าเราต้องการแสดงรูปภาพบนคอนโทรล dataGridView แทนข้อความธรรมดา เช่น ถ้าข้อมูลสินในสต็อก(UnitsInStock) น้อยกว่าข้อมูลสินค้าสั่งซื้อ(UnitsOnOrder) ให้ใส่รูปเป็นสีแดง แต่หากไม่ใช่ใส่เป็นสีเขียวแทนซึ่งจะช่วยทำให้หน้าจอแอพพลิเคชันที่ดูเรียบๆ ให้ดูน่าใช้งานยิ่งขึ้น เราสามารถทำได้โดยการใช้ DataGridViewImageColumn ไปดูวิธีการเลยครับ:...
หน้าตาแอพพลิเคชันตาม เป้าประสงค์ :
สร้างประเภทโปรเจ็กต์เป็น WindowsForms Application
ใช้งาน dataGridView ลากมันมาใส่ฟอร์ม
เพิ่ม LINQ เนื่องจากเราจะใช้แหล่งข้อมูลจากมัน
แมปตาราง Product เข้าไปใน LINQ โดยการลาก-วาง
เปิด Resource เราจะไปใส่แหล่งทรัพยกรที่เป็นรูปภาพ เพื่อไว้ใช้ในอนาคตต่อไป...
เพิ่ม Resource Image เข้าไป เพราะเราจะดึงไปแสดงในคอนโทรล dataGridView
ลากรูปภาพ หรือ Copy แล้ววางในหน้าต่าง Resource
เสร็จสิ้นขั้นตอนกำหนดสรรพสิ่งแล้ว ต่อไปเป็นการใส่โค้ดให้มันดึงข้อมูล และนำรูปไปแสดง
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinDataGridViewImageColumn
{
public partial class Form1 : Form
{
DataGridViewImageColumn imColumn = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//ใช้แหล่งข้อมูลจาก LINQ ผูกข้อมูลเข้ากับ dataGridView1
using (DataClasses1DataContext db = new DataClasses1DataContext())
{
//ดึงข้อมูลจาก LINQ เฉพาะฟิลด์ ProductID, ProductName, UnitPrice, UnitsInStock, UnitsOnOrder
var p = from t in db.Products
select new
{
t.ProductID,
t.ProductName,
t.UnitPrice,
t.UnitsInStock,
t.UnitsOnOrder
};
dataGridView1.DataSource = p.ToList();//ผูกข้อมูลใส่ dataGridView1
//สร้างออบเจ็กต์ DataGridViewImageColumn
imColumn = new DataGridViewImageColumn();
imColumn.Name = "Status";//ตั้งชื่อ Column เป็น Status
imColumn.HeaderText = "สถานะ";//ใส่ป้ายชื่อ Column เป็น สถานะ
//กำหนดให้มันอยู่ตรงกลาง
imColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
imColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
//เพิ่ม Column ใหม่ต่อท้าย {dataGridView1.ColumnCount = เป็น Index ของ Column ที่เราจะเพิ่มเข้าไปใหม่}
dataGridView1.Columns.Insert(dataGridView1.ColumnCount, imColumn);
//เมธอด ตรวจสอบเงื่อไขในการแสดงรูป
setImage2Column();
}
}
private void setImage2Column()
{
for (int i = 0; i < dataGridView1.RowCount - 1; i++)
{
int UnitsOnOrder = Convert.ToInt32(dataGridView1.Rows[i].Cells["UnitsOnOrder"].Value);
int UnitsInStock = Convert.ToInt32(dataGridView1.Rows[i].Cells["UnitsInStock"].Value);
//ถ้าจำนวนสินค้าสั่งซื้อมากว่า จำนวนสินค้าในสต็อก
//ให้ Cell จำนวนสินค้าในสต็อก ตัวหนังเป็นสีแดง, พื้นเป็นสีเหลือง, ให้แก้ไขได้ และใน Column Status ให้แสดงรูป fail
if (UnitsOnOrder > UnitsInStock)//ถ้าจำนวนสินค้าสั่งซื้อมากว่า จำนวนสินค้าในสต็อก
{
dataGridView1.Rows[i].Cells["UnitsInStock"].Style.ForeColor = Color.Red;//จำนวนสินค้าในสต็อก ตัวหนังเป็นสีแดง
dataGridView1.Rows[i].Cells["UnitsInStock"].Style.BackColor = Color.Yellow;//จำนวนสินค้าในสต็อก พื้นเป็นสีเหลือง
dataGridView1.Rows[i].Cells["UnitsInStock"].ReadOnly = false;//จำนวนสินค้าในสต็อก ให้แก้ไขได้
dataGridView1.Rows[i].Cells["Status"].Value = Properties.Resources.fail;//ใน Column Status ให้แสดงรูป fail
dataGridView1.Rows[i].Cells["Status"].ToolTipText = "Faliure";//แสดง Tooltip ว่า Faliure
}
else
{
dataGridView1.Rows[i].Cells["Status"].Value = Properties.Resources.pass;//ใน Column Status ให้แสดงรูป fail
dataGridView1.Rows[i].Cells["Status"].ToolTipText = "Pass";//แสดง Tooltip ว่า Pass
dataGridView1.Rows[i].ReadOnly = true;//ให้ทั้งแถวไม่สามารถแก้ไขได้
}
}
}
}
}
ท่านผู้อ่านสามารถ Download ตัวอย่างโปรเจ็กต์ไปศึกษาได้กันเลยครับ
แหล่งข้อมูลอ้างอิง:
- How t Display Images in Cells of the Windows Forms DataGridView Control: http://msdn.microsoft.com/en-us/library/2ab8kd75.aspx
Download source:
No comments:
Post a Comment