Archive

Archive for 2006年4月

ブラウザにより表示を切り替える

書籍「Programming Microsoft Asp.net 2.0: Core Reference」からのネタです。

まず、次のようなaspxファイルを作成します。

<%@ Page Language="C#" %>

<html>
<head runat="server">
    <title>ブラウザテスト</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Label ID="Label1"
                   runat="server"
                   Text="IEの場合はラベルが見えます"
                   ie:Visible="true"
                   mozilla:Visible="false" />
        <br />
        <asp:Button ID="Button1"
                    runat="server"
                    ie:Text="IEです"
                    mozilla:Text="FireFoxです" />
    </form>
</body>
</html>

このaspxファイルにInternet ExprolerとFirefoxからアクセスしてみましょう。

  • Internet Exprolerからのアクセス

01

 

  • Firefoxからのアクセス

02

このようにコントロールのプロパティの前にターゲットとなるブラウザを指定することで表示を切り替えることができます。
ターゲットブラウザの指定方法については
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
の中のファイルを参照とのことです。

カテゴリー:.NET, ASP.NET 備忘録

常にapplicationNameを設定しよう

Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers

ASP.NET 2.0でメンバーシップを利用していく際に常にapplicationNameを設定しておこう、という話が述べられてます。
メンバーシップによるユーザ認証がどういった仕組みで行われているかを見ていくと、このあたりはすぐわかることなんですが、わざわざまとめてるとこみると結構問題になるポイントのようですね。

#まぁ、このあたり気にしなくても手元ではとりあえず動いてしまうというのがそもそもの問題なんだろう、たぶん。

カテゴリー:.NET

GridViewの1行に複数のデータを折り返して表示する

データ項目が多い場合、横1列にデータを並べていくのではなく、途中で折り返して表示したいといった場合があります。テンプレートフィールドを利用し、GridViewでこのような表示を実現してみます。

01

データとして以下のようなものを用意しました。

02

このテーブルをページにドラッグ アンド ドロップして作成されるGridViewの編集を有効にします。

注:説明の手間が少なくてすむのでドラッグ アンド ドロップでGridViewとSqlDataSourceを作成しています。
このあたりの詳細については別にきちんと学習されることをお勧めします。

03

GridViewのスマートタグで列の編集をクリックします。表示されているフィールドウィンドウの選択されたフィールドからtel、zip、addressを削除します

04

使用できるフィールドからTemplateFieldを選択し、追加ボタンをクリックします。選択されたフィールドにTempateFieldが追加されます。

05

OKボタンをクリックしてフィールドウィンドウを閉じます。
GridViewのスマートタグでテンプレートの編集をクリックします。ItemTempateが表示されるので、そこに「Tel:」と直接記述し、Labelコントロールを貼り付けます。

06

LabelコントロールのスマートタグでDataBindingsの編集をクリックします。表示されるウィンドウでTextプロパティにtelフィールドをバインドします。

07

同じ要領で郵便番号(zipフィールド)と住所(addressフィールド)を表示するLabelコントロールをItemTemplate内に作成します。住所を表示するLabelコントロールを改行した2行目に貼り付けるように気をつけてください。

08

GridViewのスマートタグから表示をEditItemTemplateに変更します。

09

ItemTempateのときと同じ要領で今度はTextBoxコントロールを貼り付けていきます。住所の入力欄となるTextBoxだけ大きさを調整しています。

10

テンプレートの編集を終了し、デバッグを実行します。

11

とりあえず動くものはできていると思います。これがどうやって動いているか、ということについては各自考えてみてください。きちんと理解できてないと、ちょっとした変更でも自分ではできなくなってしまいますからね。

カテゴリー:.NET, ASP.NET 備忘録

複数行のデータを表示/編集できるGridView

データに改行している箇所があっても、標準のGridViewではその改行は無視されて表示されてしまいます。これは、HTMLが改行コードを無視するためなので、改行コードをbrタグに置き換えてあげる必要があります。
GridViewにそのような機能を追加してみます。

01

ここではデータベースに主キーとなるidと文字列testDataだけのテーブルを作成しています。また、あらかじめいくつかのデータをこのテーブル内に作成しておきます。
データベースエクスプローラから作成したテーブルをページにドラッグ アンド ドロップすると、GirdView1とSqlDataSource1が作成されます。GridView1の「ページングを有効にする」と「編集を有効にする」にチェックを入れます。

02

GridView1のtestDataフィールドをTemplateFieldに変換します。テンプレートの編集でtestDataフィールドのEditItemTemplateを表示し、この中に存在しているTextBoxのTextModeプロパティをMultiLineに設定します。必要であれば、Rowsプロパティの行数も調整します。

03

テンプレートの編集を終了します。
GridView1のプロパティウィンドウにイベントを表示し、PreRenderイベントをダブルクリックします。GridView1_PreRenderメソッドが自動的に生成されるので、以下の通りに記述します。

    protected void GridView1_PreRender(object sender, EventArgs e)
    {
        foreach (TableRow r in ((GridView)sender).Rows)
            foreach (TableCell tc in r.Cells)
                foreach (Control c in tc.Controls)
                   if (c is Label)
                        ((Label)c).Text = ((Label)c).Text.Replace(Environment.NewLine, "<br />");
    }

ここではGridView1がHTMLに変換される(レンダリング)前に自身が持つ行、列、とたどっていって、列の中にLabelコントロールがあったらその中のテキストデータの改行コード(Environment.NewLine)をbrタグに置き換える、という処理を行っています。
テンプレートの編集でItemTemplateをLabel以外のものに変更しているような場合はこのコードをそれにあわせて修正する必要があります。

デバッグを開始し、GridViewが改行を含んだデータを正しく表示していること、またそのデータを更新できることを確認してください。

04

カテゴリー:.NET, ASP.NET 備忘録

App_Offline.htmを利用するときのちょっとしたトリック

App_Offline.htm and working around the "IE Friendly Errors" feature

ASP.NET 2.0ではApp_Offline.htmというファイルをルートノードに置くとWebアプリケーションの実行が停止され、すべてのリクエストに対してApp_Offline.htmの内容が表示されるようになります。
サイトの運用を一時停止してアプリケーションのアップデートを行いたい場合などに便利に使える機能ですが、App_Offline.htmの内容が512バイト以下のときはIEがうまく表示してくれない、ということで、そのときの対処方法としてのちょっとしたトリックが記述されています。

カテゴリー:.NET