主婦と.NETと犬のぶろぐ

奥様 と プログラム と お犬様 の 楽しい日常

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

PropertyGrid(System.Windows.Forms.PropertyGrid)

PropertyGrid いつも使ってますよね。IDE でですけど。
もうプログラム書くのがめんどくさくなって、PropertyGrid 自身のプロパティをいじる PropertyGrid をやってみました。

...といいつつ、それだけじゃあんまりなので、PropertyGrid でどんなことができるのかなー
と TypeConverter を実装してみたり、
はたまた、PropertyGrid で設定した情報を元に SQL Server 2000 のデータベースに繋いで
スキーマげっとして、SELECT・SELECT...WHERE 主キー列=値・INSERT・UPDATE・DELETE
のストアドを CREATE する文を吐き出す ストアドプロシージャジェネレータもどきを作ってみました。
思ったより大変でした。でもおもしろかった!

■参考文献
PropertyGrid クラス
PropertyTabScope 列挙体
.NET Framework の PropertyGrid コントロールの高度な活用
Visual Studio .NET プロパティ ブラウザによるコンポーネントの本格的な RAD 化
方法 : 型コンバータを実装する
TypeConverter 階層
【SQLServer】フィールド情報の取得(爆裂!C#野郎さん)

■実行画像
PropertyGrid 自身の PropertyGrid です。
PropertyGrid PropertyGrid自身
ストアドプロシージャジェネレータもどきの PropertyGrid です。自分で作ったクラスです。TypeConverter を実装しています。
PropertyGrid ストアドプロシージャジェネレータもどき

今回はめちゃめちゃ長くなってしまったので、ソリューションを ZIP 圧縮して UP しました。
PropertyGridTest.zip

■ストアドプロシージャジェネレータもどきについて
こんなテーブルがあったとしたら、

CREATE TABLE [dbo].[E_POWDER] (
    [ID]         [int] IDENTITY (1, 1) NOT NULL ,
    [NAME]        [nvarchar] (50) COLLATE Japanese_CI_AS NOT NULL ,
    [IS_WOMAN]    [bit] NOT NULL 
)

こんなスクリプトを吐き出します。

-- Drop Script --
IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[FillE_POWDER]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[FillE_POWDER]
GO

IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[FillByKeyE_POWDER]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[FillByKeyE_POWDER] GO
IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[AddE_POWDER]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[AddE_POWDER] GO
IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[UpdateE_POWDER]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[UpdateE_POWDER] GO
IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[DeleteE_POWDER]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[DeleteE_POWDER] GO
SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO
-- E_POWDER -- /* [dbo].[FillE_POWDER] create: 2007/02/28 */ CREATE PROCEDURE [dbo].[FillE_POWDER] AS BEGIN SET NOCOUNT ON; SELECT [ID], [NAME], [IS_WOMAN] FROM E_POWDER
RETURN 0 END GO /* [dbo].[FillByKeyE_POWDER] create: 2007/02/28 */ CREATE PROCEDURE [dbo].[FillByKeyE_POWDER] @ID int AS BEGIN SET NOCOUNT ON; SELECT [ID], [NAME], [IS_WOMAN] FROM E_POWDER WHERE [ID] =@ID
RETURN 0 END GO /* [dbo].[AddE_POWDER] create: 2007/02/28 */ CREATE PROCEDURE [dbo].[AddE_POWDER] @NAME nvarchar(100), @IS_WOMAN bit AS BEGIN SET NOCOUNT ON; INSERT INTO E_POWDER ( [NAME], [IS_WOMAN] ) VALUES ( @NAME, @IS_WOMAN )
IF @@ROWCOUNT <> 1 RETURN 1
RETURN 0 END GO /* [dbo].[UpdateE_POWDER] create: 2007/02/28 */ CREATE PROCEDURE [dbo].[UpdateE_POWDER] @ID int, @NAME nvarchar(100), @IS_WOMAN bit AS BEGIN SET NOCOUNT ON; UPDATE E_POWDER SET [NAME]=@NAME, [IS_WOMAN]=@IS_WOMAN WHERE [ID] =@ID
IF @@ROWCOUNT <> 1 RETURN 1
RETURN 0 END GO /* [dbo].[DeleteE_POWDER] create: 2007/02/28 */ CREATE PROCEDURE [dbo].[DeleteE_POWDER] @ID int AS BEGIN SET NOCOUNT ON; DELETE FROM E_POWDER WHERE [ID] =@ID
IF @@ROWCOUNT <> 1 RETURN 1
RETURN 0 END GO

投稿日時 : 2007年3月20日 10:37

Feedback

# トラックバックありがとうございます 2007/03/20 21:30

はじめまして。
トラックバックして頂いたということで、お礼に参上しました。
ありがとうございます m(_ _)m

私もジェネレータ系のアプリをいくつか作っているのですが、PropertyGridは思いつきませんでした。
次に作るときは参考にさせてもらいます♪

# re: PropertyGrid(System.Windows.Forms.PropertyGrid) 2007/03/21 10:25 なおこ(・∀・)

>> ♪@爆裂!C#野郎 様

ご丁寧にコメントありがとうございます。
> ジェネレータ系のアプリをいくつか
すごいですねー!
ワタシは今回ので結構力尽きた感がw

今後ともよろしくお願いしますね。

タイトル
名前
Url
コメント