SQLServer2005 Express Edition はかつてMSDE(Microsoft SQL Server Desktop Engine)と呼ばれていた無償のデータベースソフトの後継で.NET(2.0)対応版であるが、MSDEには無かった管理ツール「Microsoft SQL Server Management Studio Express」が無償でダウンロードして使える。これは大変うれしいものだった。
ところが、やはり無償ということで製品版と違い、いくつかの機能が削られている。その一つがインポート・エクスポート機能である。
開発の途中でそれに気が付き、今更のDeveloperEditionに置き換えるのも面倒なのでManagement StudioだけをDeveloperEditionからインストールすることにした。
何とかインストールできたが、WindowsUpdateを行うとSQLServer2005のServicePack2が適用される。既にExpress版のSP2を適用済みなのだが、ツールだけでも別物と解釈されるらしい。
データベース本体まで影響があるのかと心配したが別に問題なく動いている。
2007年05月08日
Webアプリケーションの全画面表示と最大化表示
Webアプリケーションはブラウザを使うのでそのままではメニューバー・ツールバー・アドレスバーなどの余分な領域がある。
これを消したほうが画面も広く取れるし、オペレーションとは関係ない操作を未然に防ぐことができる。
これらを消すには一般的にJavascript(window.open)を使うのだが、困ったことに最初の起動時に使えない(消すことができない)。そこでワンクッション(起動用フォームを)入れる必要がある。
サンプル (ソースはこちら->WindowOpen.lzh)
1.起動メニュー
※この起動フォームは全画面と最大化をボタンで選択するが、どちらか一方を固定すればonload時に自動的にメインフォームへ飛ばすことも可能。

2.全画面表示

3.最大化表示

Javascriptの使い方(全画面・最大化)
1.起動フォーム(Default.aspx)

2.メインフォーム(Default2.aspx)

続きを読む
これを消したほうが画面も広く取れるし、オペレーションとは関係ない操作を未然に防ぐことができる。
これらを消すには一般的にJavascript(window.open)を使うのだが、困ったことに最初の起動時に使えない(消すことができない)。そこでワンクッション(起動用フォームを)入れる必要がある。
サンプル (ソースはこちら->WindowOpen.lzh)
1.起動メニュー
※この起動フォームは全画面と最大化をボタンで選択するが、どちらか一方を固定すればonload時に自動的にメインフォームへ飛ばすことも可能。
2.全画面表示
3.最大化表示
Javascriptの使い方(全画面・最大化)
1.起動フォーム(Default.aspx)
2.メインフォーム(Default2.aspx)
続きを読む
2007年05月07日
現場で使えるTipsが豊富なASP.NET2.0参考書
「ASP.NET2.0 Webアプリケーション開発入門」は、現場で使えるTipsが豊富な参考書で大変重宝した。
特にFormViewの使い方で悩んでいたときに書店で見つけ、DropDownListとGridViewとの連携などデータコントロール(GridView/DetailsView/FormView他)を使った様々な事例をTipsに紹介してくれている。
初心者向けというより、コントロールを使いこなしたい人向けといえる。
注意として、サンプルをダウンロードしてもそのままではエラーして使えなかった。新規プロジェクトでコードを貼り付けたりしていくと動く。(ダウンロードサイトにはその辺の説明があるが、それでも動かなかった)
Tipsの紹介(一例)
・DropDownListの先頭に「選択してください」を表示する
・GridViewの列がNullのとき特定の文字列を表示する
・GridViewのヘッダーを固定してスクロールする
・GridViewの列をフォーマットするときの注意事項
・DetailsViewの区分IDの代わりに区分名を表示するには
・DetailsViewの区分IDの変わりに区分名(DropDownList)を表示するには
等
特にFormViewの使い方で悩んでいたときに書店で見つけ、DropDownListとGridViewとの連携などデータコントロール(GridView/DetailsView/FormView他)を使った様々な事例をTipsに紹介してくれている。
初心者向けというより、コントロールを使いこなしたい人向けといえる。
注意として、サンプルをダウンロードしてもそのままではエラーして使えなかった。新規プロジェクトでコードを貼り付けたりしていくと動く。(ダウンロードサイトにはその辺の説明があるが、それでも動かなかった)
Tipsの紹介(一例)
・DropDownListの先頭に「選択してください」を表示する
・GridViewの列がNullのとき特定の文字列を表示する
・GridViewのヘッダーを固定してスクロールする
・GridViewの列をフォーマットするときの注意事項
・DetailsViewの区分IDの代わりに区分名を表示するには
・DetailsViewの区分IDの変わりに区分名(DropDownList)を表示するには
等
動的にフォルダを作成し、ファイルをアップロード
ファイルアップロードのサンプルはヘルプを含め、いろんなところに掲載されている。でもほとんどが固定されたフォルダにアップするようになっている。
これを任意のフォルダ(と言ってもアクセス可能な)に動的に作成したフォルダへアップしたいときにどうすれば良いか。
ASP.NET以前の旧ASPでWebアプリを作ったときは「FileSystemObject」を使ってサーバー上のドライブやフォルダを操作していた。それが今回使えるかどうか試してみたら、何の問題も無く使えた。同時にASP.NET時代の方法も試してみた。こちらも当然問題無く可能だ。
補足:
このTipsを公開直後、かるあさんから指摘がありましたFileSystemObjectを使った場合のCOM参照の開放を追加しました。
COMオブジェクトの管理についてはMicrosoftのこちらのページを参考にご覧ください。→相互運用機能アセンブリを使った複雑な COM オブジェクトの処理
サンプルはこちら→UploadTest.lzh
注:サンプルはIISでアップロード専用フォルダを仮想ディレクトリとして設定している。これは、Webアプリケーションのコンテンツフォルダとは別ドライブに配置した場合を想定したもの。
サンプル動作画面
1.起動画面

2.FileSystemObjectを使ったフォルダ作成によるアップロード
3.System.IOを使ったフォルダ作成によるアップロード
これを任意のフォルダ(と言ってもアクセス可能な)に動的に作成したフォルダへアップしたいときにどうすれば良いか。
ASP.NET以前の旧ASPでWebアプリを作ったときは「FileSystemObject」を使ってサーバー上のドライブやフォルダを操作していた。それが今回使えるかどうか試してみたら、何の問題も無く使えた。同時にASP.NET時代の方法も試してみた。こちらも当然問題無く可能だ。
補足:
このTipsを公開直後、かるあさんから指摘がありましたFileSystemObjectを使った場合のCOM参照の開放を追加しました。
COMオブジェクトの管理についてはMicrosoftのこちらのページを参考にご覧ください。→相互運用機能アセンブリを使った複雑な COM オブジェクトの処理
'フォルダ名に日時を使った文字列を使用
Dim mFolder As String = Format(Now, "yyyyMMdd-HHmmss")
・FileSystemObjectを使ったフォルダ作成
Dim FSO As Object
FSO = Server.CreateObject("Scripting.FileSystemObject")
If FSO.folderExists("C:\Uploads\" & mFolder) = False Then
FSO.createfolder("C:\Uploads\" & mFolder)
End If
FSO = Nothing
KillComObject(FSO) <--- 詳細はサンプルソースを参照
・System.IOを使ったフォルダ作成
Dim target As DirectoryInfo = New DirectoryInfo("C:\Uploads\" & mFolder)
If target.Exists = False Then
target.Create()
End If
サンプルはこちら→UploadTest.lzh
注:サンプルはIISでアップロード専用フォルダを仮想ディレクトリとして設定している。これは、Webアプリケーションのコンテンツフォルダとは別ドライブに配置した場合を想定したもの。
サンプル動作画面
1.起動画面
2.FileSystemObjectを使ったフォルダ作成によるアップロード
3.System.IOを使ったフォルダ作成によるアップロード
2007年05月02日
動的コントロールのサンプル(ASP.NET 2.0)
GridViewは大変便利であるが、表形式の入力画面が欲しいときにはやや力不足なところがある。基本的に行単位でしか編集ができないし、任意のセルに自由に移動し入力することができない。
そこでセル毎に一つ一つコントロールを配置していく方法が求められるのだが、固定した行数とは限らないのでどうしても動的に作成したい。しかし動的コントロールの作成は結構面倒で分からない点多い。いろいろ試行錯誤してようやく何とかものになったノウハウをここで紹介したい。実際の業務で使っている仕組みなので参考になると思う。
表(コンテナ)は「Table Web コントロール」を使っている。
これはそもそも動的コントロール用に用意されたと言っても良い代物で、固定の表に使うにはどう考えても無駄でしかない。
サンプルはダウンロードして使えます。→DynamicTableCreate.lzh
DynamicTableCreate2.lzh (2007.05.18更新)
「ETextBox+Buttonを作成」を追加しました。
動作画面は下図を。
@起動直後の画面:まだコントロールは一つも無い

Aテキストを表に出力

BHyperLinkコントロールを作成

CTextBoxコントロールを作成

DButtonコントロールを作成、下はボタンをクリックしたもの


追加補足
そこでセル毎に一つ一つコントロールを配置していく方法が求められるのだが、固定した行数とは限らないのでどうしても動的に作成したい。しかし動的コントロールの作成は結構面倒で分からない点多い。いろいろ試行錯誤してようやく何とかものになったノウハウをここで紹介したい。実際の業務で使っている仕組みなので参考になると思う。
表(コンテナ)は「Table Web コントロール」を使っている。
これはそもそも動的コントロール用に用意されたと言っても良い代物で、固定の表に使うにはどう考えても無駄でしかない。
サンプルはダウンロードして使えます。→
DynamicTableCreate2.lzh (2007.05.18更新)
「ETextBox+Buttonを作成」を追加しました。
動作画面は下図を。
@起動直後の画面:まだコントロールは一つも無い
Aテキストを表に出力
BHyperLinkコントロールを作成
CTextBoxコントロールを作成
DButtonコントロールを作成、下はボタンをクリックしたもの
追加補足
GridViewのテンプレートにつけたボタンをクリックしたときの行位置を取得するには
GridViewである行を選択すると標準の「選択」ボタンであれば、SelectedIndexChangedイベント内でSelectedRowとして選択行のオブジェクトを取得できる。(下コード)
Dim row As GridViewRow = GridView1.SelectedRow
だが、TemplateFieldとしてイメージボタン等を配置した場合、このボタンをクリックしてもSelectedRowは取得できない。
その場合どうするか。MicrosoftのヘルプにはRowCommandイベントを使って取得する例が載っている。(下リンク)
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.rowcommand(VS.80).aspx
が、注意すべきはこのイベントだけの手続きでは取得できないことだ。
その下に記載されているRowCreatedイベントとセットになっていることを当初全く考えもしなかったため、いくらやっても取得できず、最後には「ヘルプが間違っている」とまで思っていたのだ(^^;
説明の仕方にも問題があるとは言えないだろうか?
Dim row As GridViewRow = GridView1.SelectedRow
だが、TemplateFieldとしてイメージボタン等を配置した場合、このボタンをクリックしてもSelectedRowは取得できない。
その場合どうするか。MicrosoftのヘルプにはRowCommandイベントを使って取得する例が載っている。(下リンク)
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridview.rowcommand(VS.80).aspx
が、注意すべきはこのイベントだけの手続きでは取得できないことだ。
その下に記載されているRowCreatedイベントとセットになっていることを当初全く考えもしなかったため、いくらやっても取得できず、最後には「ヘルプが間違っている」とまで思っていたのだ(^^;
説明の仕方にも問題があるとは言えないだろうか?
Microsoftのヘルプのサンプルコード(補足)
Sub CustomersGridView_RowCreated(ByVal sender As Object, _
ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim addButton As LinkButton = CType(e.Row.Cells(0).Controls(0), LinkButton)
'ここで行番号をセットしておく
addButton.CommandArgument = e.Row.RowIndex.ToString()
End If
End Sub
Sub CustomersGridView_RowCommand(ByVal sender As Object, _
ByVal e As GridViewCommandEventArgs)
If e.CommandName = "Add" Then
'セットしておいた行番号を取得
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = CustomersGridView.Rows(index)
Dim item As New ListItem()
item.Text = Server.HtmlDecode(row.Cells(2).Text)
If Not CustomersListBox.Items.Contains(item) Then
CustomersListBox.Items.Add(item)
End If
End If
End Sub


