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 です。自分で作ったクラスです。TypeConverter を実装しています。
今回はめちゃめちゃ長くなってしまったので、ソリューションを 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