2007年05月08日

Webアプリケーションの全画面表示と最大化表示

Webアプリケーションはブラウザを使うのでそのままではメニューバー・ツールバー・アドレスバーなどの余分な領域がある。
これを消したほうが画面も広く取れるし、オペレーションとは関係ない操作を未然に防ぐことができる。
これらを消すには一般的にJavascript(window.open)を使うのだが、困ったことに最初の起動時に使えない(消すことができない)。そこでワンクッション(起動用フォームを)入れる必要がある。

サンプル (ソースはこちら->WindowOpen.lzh)

1.起動メニュー
※この起動フォームは全画面と最大化をボタンで選択するが、どちらか一方を固定すればonload時に自動的にメインフォームへ飛ばすことも可能。

起動フォーム

2.全画面表示
全画面表示

3.最大化表示
最大化表示


Javascriptの使い方(全画面・最大化)

1.起動フォーム(Default.aspx)
起動フォームのJavascript

2.メインフォーム(Default2.aspx)
メインフォームのJavascript
続きを読む
posted by なっちゃん at 14:44| 静岡 ?J| Comment(1) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

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)を表示するには



ASP.NET 2.0 Webアプリケーション開発入門
ASP.NET 2.0 Webアプリケーション開発入門
葛西 秋雄

関連商品
Microsoft Visual Studio 2005によるWebアプリケーション構築技法
Pocket詳解 ASP.NET辞典
プロが作った!すぐに使える! ASP.NET 2.0 実践サンプル集
10日でおぼえるASP.NET 2.0 入門教室
ひと目でわかるMicrosoft SQL Server 2005
by G-Tools
posted by なっちゃん at 13:39| 静岡 ?J| Comment(0) | TrackBack(1) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

動的にフォルダを作成し、ファイルをアップロード

ファイルアップロードのサンプルはヘルプを含め、いろんなところに掲載されている。でもほとんどが固定されたフォルダにアップするようになっている。
これを任意のフォルダ(と言ってもアクセス可能な)に動的に作成したフォルダへアップしたいときにどうすれば良いか。
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を使ったフォルダ作成によるアップロードFileSystemObjectによるフォルダ作成

3.System.IOを使ったフォルダ作成によるアップロードSystem.IOによるフォルダ作成
posted by なっちゃん at 11:17| 静岡 ?J| Comment(2) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年05月02日

動的コントロールのサンプル(ASP.NET 2.0)

GridViewは大変便利であるが、表形式の入力画面が欲しいときにはやや力不足なところがある。基本的に行単位でしか編集ができないし、任意のセルに自由に移動し入力することができない。

そこでセル毎に一つ一つコントロールを配置していく方法が求められるのだが、固定した行数とは限らないのでどうしても動的に作成したい。しかし動的コントロールの作成は結構面倒で分からない点多い。いろいろ試行錯誤してようやく何とかものになったノウハウをここで紹介したい。実際の業務で使っている仕組みなので参考になると思う。

表(コンテナ)は「Table Web コントロール」を使っている。
これはそもそも動的コントロール用に用意されたと言っても良い代物で、固定の表に使うにはどう考えても無駄でしかない。

サンプルはダウンロードして使えます。→ DynamicTableCreate.lzh
DynamicTableCreate2.lzh (2007.05.18更新)
「ETextBox+Buttonを作成」を追加しました。


動作画面は下図を。

@起動直後の画面:まだコントロールは一つも無い
起動直後

Aテキストを表に出力
テキストを出力

BHyperLinkコントロールを作成
リンクを作成

CTextBoxコントロールを作成
テキストボックスを作成

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

クリックイベントを起こしたところ

追加補足
posted by なっちゃん at 19:32| 静岡 ????| Comment(5) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

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イベントとセットになっていることを当初全く考えもしなかったため、いくらやっても取得できず、最後には「ヘルプが間違っている」とまで思っていたのだ(^^;
説明の仕方にも問題があるとは言えないだろうか?

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
posted by なっちゃん at 17:19| 静岡 ????| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年04月26日

ASP.NET Ajax を導入後、既存のWebアプリをAjax対応にする場合の注意

Web.Configに以下の箇所を追加しないと、エラー「'Sys'は宣言されていません」が出る。

1.configSections セクション丸ごと
2.system.web セクション内
 ・pages内のcontrols
 ・httpHandlers
 ・httpModules
3.system.webServer セクション丸ごと

実際の内容は、新規プロジェクトでASP.NET AJAX-Enabled Web Applicationを作成した時のWeb.Configを参照するとよい。
posted by なっちゃん at 11:11| 静岡 ?J| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年04月25日

些細なことだけど、操作性が良くなる設定

ASP.NET2.0の開発をするとき、VS2005の初期設定ではちょっと煩わしい操作上の問題がある。

それは、ソース(フォーム)にコードを貼り付けをしようとしてマウスでその箇所をクリックすると、タグが強調表示されて文字列が右方向にズレてしまう。そのため右クリックしてメニューを表示するタイミングで貼り付け位置が当初の予定より左にズレでしまい、変なところにコードが貼り付いてしまうのだ。最初のクリックを省いて右クリックだけ行えば良いのだが、癖でついクリックしてしまうので厄介なのである。

1.タグが強調表示されて・・・
タグが強調表示されて・・・

2.貼り付けたコードがズレた!
貼り付けたコードがズレた!

タグの強調表示はあまりメリットが無いので、この機能を止めてしまうにはどうすれば良いのか探してみたところ下図のところのチェックを外せば良いことが分かった。

3.「区切り記号を自動強調表示する」を解除
強調表示を解除
posted by なっちゃん at 10:35| 静岡 ?J| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年03月20日

ASP.NET 2.0 で動的にコントロールを作成する方法

Microsoftのサポートオンラインには「Visual Basic .NET を使用して ASP.NET で動的にコントロールを作成する方法」というサンプルがある。これはASP.NETの1.0/1.1のためのものであるが、2.0ではどうしたらいいのかと思って試しにやってみたところ、ほとんど利用可能であることがわかった。2.0で動かすには、余分に追加するのではなく、不要な箇所を除くだけである。

オリジナルはMicrosoftのサイトを見てもらうとして、ASP.NET2.0のソースを用意したので必要な方はご覧ください。

ダウンロード→Default.lzh


その後、「ASP.NET Webページにコントロールをプログラムによって追加する」というページを見つけた。さらに、「Table Web サーバー コントロールに行およびセルを動的に追加する」もあった。
いずれもASP.NET2.0のサンプルなので、こちらの方がより参考になると思う。
posted by なっちゃん at 10:32| 静岡 ????| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年02月28日

ASP.NET2.0+AJAXは使える!

Ajaxについては以前から興味があったが、なかなか使う機会がなかった。
先月Microsoftが「ASP.NET 2.0 AJAX Extensions 1.0」を公開してようやく実際に仕事(業務)で使える状態になった。

サンプルを動かしてみてその使い勝手の良さに感心した。これからのASP.NETでは必須のツールになることは間違いないだろう。
WebアプリにWindowsアプリ(リッチクライアント)の操作性を提供するのだから、一度でも使ったら元に戻る気には到底なれないと思う。しかもこれはフレームワークでの提供なので誰でも簡単に使える。まだ詳細に使ってみた訳ではないので本当の使い勝手は未知数だが試してみる価値は大いにあろう。

ASP.NET AJAXを勉強するなら山田祥寛氏とWINGSプロジェクトのものがいい。
1.「マイクロソフトのAjax対応フレームワーク「Atlas」入門」
※AtlasというのはASP.NET 2.0 AJAX Extensionsの開発コード名
http://itpro.nikkeibp.co.jp/article/COLUMN/20061110/253333/
2.「触ってみようASP.NET 2.0 AJAX Extensions 」
http://codezine.jp/a/article/aid/799.aspx

山田氏のAjax入門書はASP.NET以外にJava,PHPも解説している。

サーバサイドAjax入門 Java/PHP/ASP.NET連携でAjaxプログラミングを極める!
サーバサイドAjax入門 Java/PHP/ASP.NET連携でAjaxプログラミングを極める!
山田 祥寛

関連商品
Ajaxハッカーズ・プログラミング―基礎からprototype.js、Yahoo!UIライブラリ、HTML_AJAXの活用までWebアプリケーション制作のプログラミング・テクニック
Ajaxイン・アクション
Ajax 実装のための基礎テクニック
実例で学ぶ! [入門と実践] Ajax+XML [CD-ROM付き]
AJAX Webアプリケーション アイデアブック
by G-Tools
posted by なっちゃん at 19:44| 静岡 ????| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする

2007年02月11日

既存アプリのVista対応・改造計画:最終回「おまけ:必殺技の紹介」

これまで5回にわたりVista対応への方法を解説してきたが、そこまで丁寧にやってられないということも実際の現場ではあるだろう。
そこで安直に既存アプリを従来通り動かす方法を最後に紹介したいと思う。
そんな方法があるのなら先に言ってよ、と思う人もいるかもしれない。だが、この方法にはそれなりの問題(代償)もあるので、正しい知識を得て、その上でどうしても必要に迫られて行う場合以外はやるべきでは無いと考えている。そこをご了解願いたい。

方法は2つある。

第1の方法:「Administratorでログオンする」
Windows Vista のBusinessとUltimateのエディションを使っている場合にのみ可能な方法である。
HomeやHome PremiumではAdministrator自体が存在しない(XP Homeではセーフモードで使えた)のでこの方法は使えない。

Administratorアカウントは初期値では無効になっているのでまず管理ツールのコンピュータの管理を開いて有効にする。
Windowsのセットアップ時やユーザーの追加で作成したAdministratorグループのアカウントと違い、ビルトインアカウントのAdministratorだけがUAC(ユーザーアカウント制御)の呪縛から開放されている。しかし、当然ながらその分セキュリティが犠牲になっていることを忘れないで欲しい。

第2の方法:「UACを無効にする」
これは正直なところ最後の奥の手で通常は薦められない。が、どうしても動かしたい(動かせねばならぬ)アプリがある場合にのみ行うべきである。
またUACを無効にするとOSがしつこく警告を出すようになる。これもかなり煩わしい。

UACの無効化はコントロールパネルをクラシック表示にしたときのユーザーアカウントで行う。(下図)

UACの無効化

UACの無効化

無効になった途端に警告が出る。
警告メッセージ
posted by なっちゃん at 20:57| 静岡 ????| Comment(0) | TrackBack(0) | Windows Vista | このブログの読者になる | 更新情報をチェックする