【ASP.NET】Ajax非同期ポストバックの画像やメッセージの表示方法

ASP.NETでAjaxの非同期ポストバックの時の画像やメッセージを表示するためには、まず、ScriptManagerコントロールとUpdatePanelを配置する。
そして、メッセージや画像を表示するためのLabelを配置する。
そして以下のJavaScriptを読み込ませるだけで完成。

function pageLoad(){
    var mng = Sys.WebForms.PageRequestManager.getInstance();

    mng.add_initializeRequest(
        function(sender, args)
        {
            $get('LabelStatus').innerHTML = "
処理中です。。。"; } ); mng.add_endRequest( function(sender, args) { $get('LabelStatus').innerHTML = ""; } ); }

【ASP.NET】DataTableのSelectメソッドはパフォーマンスが悪い!

DataTableのSelectメソッドを多数使った処理のファイルを作成したが、処理時間がとても長くなったため、いろいろと調べてみた。
msdnにまさにぴったりの記事を見つけたので忘れないようにメモ。

テーブル内のデータの表示

DataTable の Select メソッドへの呼び出しを多数実行する場合は、最初に DataTable の DataView を作成することにより、パフォーマンスを向上させることができます。DataView を作成すると、テーブルの行にインデックスが付けられます。Select メソッドがこのインデックスを使用すると、クエリ結果を生成するための時間が大幅に減少します。

実際にDataTableからDataViewを作成して試してみたら、処理時間が短縮した。
ただし、値を取得するにはDataViewはちょっとめんどくさい。
DataTableのSelectメソッドってもしかして。。。全部回してデータを振り分けてるのかな??

【ASP.NET】C#冗長なViewStateをすっきりとSessionで管理する方法

ASP.NETでは、自動で、ページの状態を保持するViewStateがhtmlタグの
<input type=”hedden”>によって吐き出される。
ポストバックが起きて画面が変わっても、状態を保持しているため、細かい設定などしなくても入力値などが保持される。
しかし、GridView等で一覧を作った時など、このViewStateがかなりの長さになって出力に時間がかかったりすることがある。
実際に、仕様上どうしても数百件のデータをページング無しでGridView出力しないといけない画面があり、この画面のViewStateは数千行になった経験がある。
このViewStateをクライアントサイドに出力するのではなく、なんとかサーバーサイドに(Sessionとして)保持出来ないか、調べてみたところ、ASP.NET2.0ではViewStateを保持するSessionPageStatePersisterクラスというのがあるとのこと。
早速テストして試してみた。

まず新規のクラスファイル(SessionPageStateAdapter.cs)を作成し、以下のコードを記述。
これをApp_Codeフォルダに保存。

public class SessionPageStateAdapter :
    System.Web.UI.Adapters.PageAdapter
{
    public override PageStatePersister GetStatePersister ()
    {
        return new SessionPageStatePersister(this.Page);
    }
}

次に「ASP.NETフォルダの追加」で「App_Browsers」フォルダを作成。
そのフォルダの中に「App.browser」ファイル(ファイル名はなんでもいい)を作成し、以下のコードを記述。
この「browser」ファイルだが、各ブラウザごとにいろいろと設定を記述することが出来るファイルらしい。(初めて使用した)


  
    
      
    
  

以上の操作だけで、全画面のViewStateの出力がすっきりとし、パフォーマンス的にはいいんじゃないだろうか?
まぁ、まだテスト段階の使用なので問題などあれば追記していこうと思う。
このSessionPageStatePersisterクラス、将来的にはデフォルト使用されるようになる気がする。

参考サイト
ビュー ステート: 沈黙のパフォーマンス キラー
[.NET] ViewStateをセッションに保存する

【ASP.NET】C#DataTableの中身をdistinct(グルーピング)する方法

DataTableで重複データがあるときに重複を除去するため、distinctというか、グルーピングする方法は以下のようにする。

DataTable dtUnique = dtMyTable.DefaultView.ToTable(true, "Column1", "Column2");

これで、”Column1″, “Column2″ でグルーピングしたデータテーブルが帰ってくる。

プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応

著者/訳者:ジェシー リバティ

出版社:オライリージャパン( 2006-02 )

定価:¥ 5,040

単行本 ( 645 ページ )

ISBN-10 : 4873112648

ISBN-13 : 9784873112640


【ASP.NET】GridViewからDataTableの作成

意外と用途は少ないかも知れないが印刷回りを実装する時に必要に迫られて、GridViewからDataTableの作成を行ったので、忘れないようメモ。

//データテーブルを作成
DataTable dt = new DataTable();

//データテーブルに任意のカラムを追加
dt.Columns.Add("test0");
dt.Columns.Add("test1");
dt.Columns.Add("test2");

//GridViewの行数分ループしてDataTableを作成
for (int i = 0; i < GridView.Rows.Count; i++)
{
    DataRow dr = dt.NewRow();
    dr["test0"] = GridView.Rows[i].Cells[0].Text;
    dr["test1"] = GridView.Rows[i].Cells[1].Text;
    dr["test2"] = GridView.Rows[i].Cells[2].Text;
    dt.Rows.Add(dr);
}

絶対現場主義Visual C#実践講座―開発の現場から生まれた実践テクニック&TIPS集

著者/訳者:丸岡 孝司

出版社:ラトルズ( 2007-08 )

定価:¥ 2,730

Amazon価格:¥ 2,730

単行本 ( 411 ページ )

ISBN-10 : 4899771975

ISBN-13 : 9784899771975


【ASP.NET】デバッグモードでだけ実行するプログラムの書き方

処理時間を出力したりするのに、デバッグモードの時だけ出力したい時がある。
その時は以下のように記述

#if DEBUG
            Label1.Text = "デバッグの時だけ出力されます。";
#endif

※「DEBUG」は必ず大文字じゃないと、処理されない。

【ASP.NET】制約を有効にできませんでした。行に入力できるのは・・・

これまた長時間悩み苦しんだので。。。
メモしておく。
C#で、型付DataSet(XSD)を使ったプログラムを実行させてたら

「制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。」

というエラーが出た。

DataTableの カラムのプロパティが間違っていた(MaxLengthの長さが実際よりも短かった)だけだった。

データベースのプロパティを変更したら必ず、DataSetのプロパティも変えないと。

プログラミングMicrosoft ASP.NET 3.5 (マイクロソフト公式解説書 Microsoft Visual Studi)

著者/訳者:Dino Esposito

出版社:日経BPソフトプレス( 2008-09-08 )

定価:¥ 9,975

Amazon価格:¥ 9,975

単行本(ソフトカバー) ( 1224 ページ )

ISBN-10 : 489100603X

ISBN-13 : 9784891006037


【Asp.Net】readonlyの値をサーバーに送信する

長時間つまづいたので、忘れないようメモ。
GridView内のコントロールのプロパティを

ReadOnly=True

にしてた時、サーバーに送信後値がとれずにいた。
しかし、GridViewのRowDataBoundで

コントロール.Attributes["ReadOnly"] = "ReadOnly"

で設定するとサーバーに送信することが出来た。

【Asp.Net】TreeViewのノードの展開(折りたたみ)を設定する

DataBoundイベントでExpandedを使用する 

void Data_Bound(Object sender, TreeNodeEventArgs e)
  {
    if(e.Node.Depth == 1)
    {
      e.Node.Expanded = true;
    }
    else
    {
      e.Node.Expanded = false;
    }
  }