リード開発メモ

大阪のソフトウェア会社です。 技術的な事柄についてのメモとしてブログを始めます。

.NET

C# DataGridView の IME 制御

DataGridView で IME 制御するは、CellEnter で行うのが一般的なようだ。デザインでできないが、CellEnter なら列ごとやセルごと、値によって動的に切り替えることができる。
private void DataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
	var columnName = DataGridView1.Columns[e.ColumnIndex].Name;
	if (columnName == "Name")
	{
		DataGridView1.ImeMode = System.Windows.Forms.ImeMode.Hiragana;
	}
	else
	{
		DataGridView1.ImeMode = System.Windows.Forms.ImeMode.Disable;
	}
}

以上。

PetaPoco を使ってみる(その8)

PetaPoco の main branch は複合キー(複数の項目で主キーを形成する)に対応していないようだ。

まず、T4 Template による POCO の自動生成を行うと、POCO に PrimaryKey 属性が付加されるが、主キーのうちの最初の項目しか認識されない。そして、PetaPoco.cs 内の各処理も複合キーに対応していないようだ。

したがって、PetaPoco の main branch を使っている場合で、複合キーを持つテーブルに対して Updateメソッドや Delete メソッドを使うと、意図しない結果になってしまう。しょうがなく SQL を実行することになる。

実は、 複合キーに対応した PetaPoco の派生が Github にあがっている。
https://github.com/schotime/petapoco

この branch では、ほかに Version 属性などにも対応しているようだ。

しかし、この branch に付属の T4 Tempalate でも、複合キーに対応していないようなので、自分で T4 Tempalate を書き換える必要がある。
その際は、次のように PrimaryKey 属性にカンマ区切りで主キーの項目名が並ぶようにする。
[TableName("銀行口座M")]
[PrimaryKey("支部コード,地区コード", autoIncrement=false)]
[ExplicitColumns]
public partial class PPRow_銀行口座M : PPDB.Record  
{
	[Column] public string 支部コード { get; set; }
	[Column] public string 地区コード { get; set; }
	[Column] public string 銀行名 { get; set; }
	[Column] public string 銀行支店名 { get; set; }
	[Column] public DateTime? 登録日時 { get; set; }
	[Column] public DateTime? 変更日時 { get; set; }
}

以上。

PetaPoco を使ってみる(その7)

前回は、PetaPoco 付属の T4 Template で Poco を自動生成した。
PetaPoco を使ってみる(その6)

ただ、できあがった cs ファイル(デフォルトでは Database.cs)の中を見てみると、空白行がえらく多く、不恰好である。

この原因は T4 Template のファイルの改行コードが LF になっているためのようだ。以下のファイルを改行コード CR+LF で保存しなおしておくと具合がよくなる。
  ・Database.tt
  ・PetaPoco.Core.ttinclude
  ・PetaPoco.Generator.ttinclude

以上。

PetaPoco を使ってみる(その6)

PetaPoco には、データベースから Poco を自動的に生成するための T4 Template が付属している。今回はそれを使ってみる。

https://github.com/toptensoftware/petapoco
上から PetaPoco をダウンロードすると、Models フォルダの下に Generated フォルダがあり、その中に以下の4ファイルがある。
  ・Database.cs
  ・Database.tt
  ・PetaPoco.Core.ttinclude
  ・PetaPoco.Generator.ttinclude

これらのファイルのうち下の3つをプロジェクトに追加して、Visual Studio から使用するのだが、今回は分かりやすいように新規プロジェクトでやってみる。

1. C# のクラスライブラリの新規プロジェクトを作成する。

2. アプリケーション設定ファイル App.config をプロジェクトに追加し、データベースへの接続文字列を追加する。たとえば接続文字列名 PPTest で追加すると、以下のようになる。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="PPTest" providerName="System.Data.SqlClient" connectionString="Data Source=localhost\SQLEXP2012; Initial Catalog=PPDB; User ID=sa; Password=sa; " />
    </connectionStrings>
</configuration>


3. 参照設定の追加で System.Configuration を追加する。上記の接続文字列を読み込むのに必要となるようだ。

4. ダウンロードした PetaPoco のファイルのうち、以下をプロジェクトに追加する。
  ・PetaPoco.cs
  ・Database.tt
  ・PetaPoco.Core.ttinclude
  ・PetaPoco.Generator.ttinclude

5. 追加した Database.tt を開き、冒頭の ConnectionStringName に、App.config に追加した接続文字列名を指定する。ここでは上で指定した PPTest を設定する。
また、必要に応じて Settings とコメントのある部分を編集する。ここでは Namespace と ClassPrefix を指定してみた。
    // Settings
    ConnectionStringName = "SHK";            // Uses last connection string in config if not specified
    Namespace = "PPTest.PPDatabase";
    RepoName = "";
    GenerateOperations = true;
    GeneratePocos = true;
    GenerateCommon = true;
    ClassPrefix = "PPRow_";
    ClassSuffix = "";
    TrackModifiedColumns = false;

6. ここまで設定したら、Visual Studio のソリューションエクスプローラーの Database.tt の上で右クリックし、「カスタム ツールの実行」を選ぶ。そうすると、Database.cs が生成され、その中に Poco が生成されている。

以上だが、そのままやると以下のような警告が出てしまう。
C# 2.0 と C# 3.5 のコンパイラはサポートされなくなりました。テンプレートは、指定された 'v3.5' ではなく、常にバージョン 4 のコンパイラでコンパイルされます。

警告が嫌な場合は、PetaPoco.Core.ttinclude の1行目にある以下の "C#v3.5" を "C#" と編集するといい。
<#@ template language="C#v3.5" hostspecific="True" #>

以上。

C# フォントを動的に読み込む

C# フォントを動的に読み込むには PrivateFontCollection を使う。
using (var pfc = new System.Drawing.Text.PrivateFontCollection())
{
    pfc.AddFontFile(@"..\..\font-file-name.ttf");
    label1.Font = new System.Drawing.Font(pfc.Families[0], 12);
}

以上。

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計: