Tuesday, July 26, 2016

[C#] DataGridView - 計算欄位

在 VFP 中,只要直接在 Grid ControlSource 內填入計算式,就可以產生計算欄位資料,C# DataGridView 則是要 VirtualMode 搭配 CellValueNeed Event 來作到

Project
[C#] DataGridView - 計算欄位-1

C# Code
namespace DGVVirtualMode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.DataSource = GetDataSource();

            dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn {
                    DataPropertyName = "N1",
                    Name = "Col1",
                    HeaderText = "數字欄位 1",
                    Width = 100,
                    Visible = true });

            dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn {
                    DataPropertyName = "N2",
                    Name = "Col2",
                    HeaderText = "數字欄位 2",
                    Width = 100,
                    Visible = true });

            // 計算欄位設為 ReadOnly 比較符合實務情況
            dataGridView1.Columns.Add(
                new DataGridViewTextBoxColumn {
                    DataPropertyName = "",
                    Name = "Col3",
                    HeaderText = "計算欄位",
                    Width = 100,
                    Visible = true,
                    ReadOnly = true });

            dataGridView1.VirtualMode = true;
            dataGridView1.CellValueNeeded += DataGridView1_CellValueNeeded;
        }

        private void DataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            if (e.RowIndex < 0) return;

            DataGridView DGV = sender as DataGridView;
            if (e.ColumnIndex != DGV.Columns["Col3"].Index) return;

            // 方法一:利用 DataGridView 取值
            e.Value = (int)DGV.Rows[e.RowIndex].Cells["Col1"].Value + (int)DGV.Rows[e.RowIndex].Cells["Col2"].Value;

            // 方法二:利用 DataTable 取值
            DataTable dt = DGV.DataSource as DataTable;
            e.Value = (int)(dt.DefaultView[e.RowIndex]["N1"]) + (int)(dt.DefaultView[e.RowIndex]["N2"]);
        }

        private DataTable GetDataSource()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("N1", typeof(int));
            dt.Columns.Add("N2", typeof(int));

            dt.Rows.Add(1, 1);
            dt.Rows.Add(2, 2);
            dt.Rows.Add(3, 3);
            dt.Rows.Add(4, 4);
            dt.Rows.Add(5, 5);

            return dt;
        }
    }
}
結果
[C#] DataGridView - 計算欄位-2

Monday, July 25, 2016

[C#] DataGridView 搭配 PictureBox 動態顯示圖片

這篇筆記 [C#] DataGridView - 字串路徑圖片 的作法是直接在 DataGridView 上顯示圖片,缺點是 DataGridView 資料因為 DataGridViewImageColumn 會拉的很長,且也不見得使用者需要看見每筆資料圖片,所以這篇就練習,一開始並不顯示圖片,當使用者需要時才把相片叫出來,且相片位置要顯示在該資料行上,算是這篇筆記的延伸 [C#] PictureBox 顯示圖片

簡單專案:就一個 Form

[C#] DataGridView 搭配 PictureBox 動態顯示圖片-1

Layout:左邊一個 DataGridView、右邊是 PictureBox

[C#] DataGridView 搭配 PictureBox 動態顯示圖片-2

Saturday, July 23, 2016

[C#] DataGridView - 字串路徑圖片

閱讀這篇官方文章 如何:自訂 Windows Form DataGridView 控制項中的資料格式,練習在 DataGridView 上,顯示字串路徑圖片

利用 DataGridViewImageColumn 來顯示圖片,要在 CellFormatting Event 內,把字串路徑轉換為圖檔,並塞進 Cell 內

簡易專案,就通通寫在一個 Form 內

[C#] DataGridView - 字串路徑圖片-1

Thursday, July 21, 2016

PowerPoint 轉 JPG 檔案

在 FB 上看見朋友提到 PowerPoint 可以轉 JPG 檔案,來了解一下

把製作好,檔案名稱為 dmeo 的 PowerPoint 另存新檔,存檔類別選擇 "JPEG 檔案交換格式"

PowerPoint 轉 JPG 檔案-1

詢問匯出選項,選擇 "所有投影片"

PowerPoint 轉 JPG 檔案-2

轉 JPG 成功訊息,但附檔名怪怪的,明明是轉到一個資料夾內,副檔名卻是 jpg

PowerPoint 轉 JPG 檔案-3

在 Demo 資料夾內就可以看到轉出的 jpg 檔案

PowerPoint 轉 JPG 檔案-4

PowerPoint 轉 JPG 檔案,轉出的檔案預設是 96dpi,要更改成較高的解析度,要去機碼內進行設定,Orz

使用的是 Office 2013,機碼位置為 HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\PowerPoint\Options 在這裡新增 ExportBitmapResolution 並輸入想要的 dpi 大小,詳見下圖,增加加碼 Step By Step 步驟,請參考 如何變更 PowerPoint 投影片的匯出解析度 官方文件

PowerPoint 轉 JPG 檔案-5

再次從 PowerPoint 轉 JPG 就可以看出 JPG 檔案的差異啦

PowerPoint 轉 JPG 檔案-6

官方文件中更改 dpi 限制
當您在 PowerPoint 中設定 ExportBitmapResolution 登錄值時,需要考慮到限制。根據投影片的最長邊緣,PowerPoint 可以匯出的最大解析度為 3072 像素。例如,標準 10 英吋 × 7.5 英吋投影片會有最大有效 DPI 值 307。3070 像素結果 (10 × 307 = 3070) 便會落在 3072 的限制內。不過,任何大於標準投影片 307 的 DPI 設定會回復成 3072 的限制。

Wednesday, July 20, 2016

AutoCAD 2008 LT 授權移轉

更換設計單位同事的 PC,OS 也從 Win7 換成 Win10,遇上 AutoCAD 授權移轉問題

發現必須先在 Win7 授權程式內建立 Win10 PC 資料後,匯出的授權才能在 Win10 上匯入,下圖是遇上的疑問,建立 Win10 PC 資料時,有要輸入識別碼,詢問老大識別碼要輸入甚麼,久久才有機會做的動作,他第一時間也是傻眼,後來在 Win7 授權程式內發現,原來授權程式左下角就有識別碼,在 Win10 上執行授權程式,找出識別碼,再回來 Win7 上建立 Win10 PC 資料,完成授權移轉

AutoCAD LT 2008

印象中之前移轉也是我弄的,不過這次還是忘記怎麼移轉,還是紀錄一下好了