星期一, 10月 20, 2014

[C#] 格式化 DataGridView 內資料

練習在 DataGridView 內,對資料進行格式化
  1. Money 欄位資料每三位有ㄧ個小數點
  2. Money 欄位內不同金額區間設定不同顏色表示
  3. 點選 Money 欄位內資料,會改變顏色來強化點選的 cell
  4. 日期欄位內資料指定格式化為 D
  5. NULL 值必須顯示未輸入日期字樣
  6. Money 欄位利用 CellFomatting、Date 欄位利用 DefaultCellStyle.Format 來格式化
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 建立基礎資料
            DataTable dt = new DataTable("Demo");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Money", typeof(decimal));
            dt.Columns.Add("Date", typeof(DateTime));
            dt.Rows.Add(1, 2456, DateTime.Now);
            dt.Rows.Add(2, 789456123, DateTime.Now.AddDays(1));
            dt.Rows.Add(3, 456123, DateTime.Now.AddDays(2));
            dt.Rows.Add(4, 1, DateTime.Now.AddDays(3));
            dt.Rows.Add(5, 1111, null);
            dt.Constraints.Add("PK", dt.Columns["ID"], true);
            dgvData.DataSource = dt;
            dgvData.AllowUserToAddRows = false;

            // 利用 DefaultCellStyle.Format 屬性來 Date 欄位格式化
            dgvData.Columns["Date"].DefaultCellStyle.Format = "d";
            dgvData.Columns["Date"].DefaultCellStyle.NullValue = "未輸入日期";
        }

        private void dgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            // 利用 CellFormatting 來完成 Money 欄位格式化
            if (dgvData.Columns[e.ColumnIndex].Name.Equals("Money"))
            {

                decimal money = (decimal)e.Value;

                e.CellStyle.Format = "###,###,###";
                e.CellStyle.SelectionBackColor = Color.Red;
                e.CellStyle.SelectionForeColor = Color.White;
                e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

                if (money > 0 && money <= 1000) e.CellStyle.BackColor = Color.LightBlue;
                if (money > 1000 && money <= 10000) e.CellStyle.BackColor = Color.LightGreen;
                if (money > 10000) e.CellStyle.BackColor = Color.LightPink;
            }
        }
    }
}
[C#] 格式化 DataGridView 內資料

沒有留言:

張貼留言