<asp:TextBox> コントロールは動的に <input> と id 属性を生成してしまうため、 <label> の for 属性には静的な値は指定できない。
これに対応するにはやり方は二つ。
<asp:Label ID="lblName" AssociatedControlID="tbName">Label name</asp:Label> <asp:TextBox ID="tbName" runat="server"></asp:TextBox>
<label for="<%=tbName.ClientID %>">Label name</label> <asp:TextBox ID="tbName" runat="server"></asp:TextBox>
.NET でカスタムイベントを UserControl に追加する方法を何度か調べている気がしたので、まとめておく。
たしか .NET 2003 のときは結構面倒くさかった気がしたけど、今はクラスに event handler 定義するだけでプロパティパネルにも簡単に表示させることができるんだね。
とりあえず環境
VisualStudio 2005 C# .NET
GridView を使用してやる方法です。
GridView を使って Excel にエクスポートすると、どんな形式のクエリでも書式でもうまいことできるのでとても便利。
とりあえず環境
VisualStudio 2005
ASP .NET C#
簡単な手順
1) GridView と SqlDataSource を追加する
2) Select したいクエリを SqlDataSource に指定する
3) GridView の Columns を適切に追加したり書式とか整理したりする
4) GridView の RenderControl で出力してやる
これ見ても分からんのでコードを見るのがいいと思う。
zip ファイルなどを圧縮した際に、自己解凍形式のファイルを出力するソフトとかあるじゃないですか。
あんな感じで exe ファイルを生成するソフトの .NET 版を作ってみたいなと思い、色々リサーチしてみたので、その時のメモ。
実は .NET には CSharpCodeProvider というとんでもないクラスが存在しているので、これを使ってみました。
今回開発した EnjoiCrypto にもこのテクは使っています。
一応環境。
.NET Framework 1.1/Mono 1.2
SVN から mono を取り出して Linux-Windows Cross-platform アプリを作ってるんだけど、ソースコードのコンパイルではまったので、むかつきがてらメモ。
mono の C# のコンパイルは mcs だっていうのは知ってたんだけど、どうやっても 2.0 対象のクラスとかもろもろがうまくいかない。
で、小一時間悩んだ挙句、 2.0 向けのコンパイラはそもそも gmcs だということが判明。
$ gmcs EnjoiXXXX.cs Compilation succeeded - 0 warning(s)できた。。
Visual Studio .Net/2003/2005 などがインストールされてるマシンで、 ASP .NET のプロジェクトを作成する際に、「ASP .NET Version 1.1 が実行されていません」みたいなメッセージが表示されて、作成できないことがある。
これは、 IIS を再インストールしたり、 .Net は 1.0 、 2003 は 1.1 、 2005 は 2.0 と、 Visual Studio のバージョン毎に動作する .NET のバージョンが違うことから起きたりする。
このエラーを解消するには、 IIS で動作させたい ASP .NET のバージョンにしてやればいい。実際には以下のコマンドを打つ。
1.1.4322 の場合。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>aspnet_regiis.exe /i ASP.NET (1.1.4322.0) のインストールを開始します。 ASP.NET (1.1.4322.0) のインストールが完了しました。
もしくは「管理ツール」の「インターネット インフォーメーション サービス」、「既定の Web サイト」のプロパティから、 ASP .NET タブを開いて変更することもできる。
.Net から MySQL に接続するには MySQL AB がリリースしている MySQL Connector/Net を使用します。
MySQL® Connector/Net
MySQL はフリーでかなり優れているので、 .Net からの使用用途もかなり増えました。
とりあえず Visual Studio 2003 で C# ASP .NET から MySQL に接続しました。
this.Response.AddHeader("Content-Disposition","attachment;filename=CSVData.csv"); this.Response.AddHeader("media-type","application/octet-stream"); this.Response.WriteFile(csvFilelPath); this.Response.End();
string strDir = "C:\\"; string strFile = "test.csv"; OleDbConnection myConn = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDir + ";Extended Properties='TEXT;HDR=NO'"); myConn.Open (); OleDbDataAdapter sqlda = new OleDbDataAdapter ("SELECT * FROM " + strFile, myConn); DataTable dtbl = new DataTable (); sqlda.Fill (dtbl); dgrdCsv.DataSource = dtbl; myConn.Close ();ちなみに、読み込む CSV のフィールドタイプを指定した場合は、 schema.ini を用意して CSV と同じフォルダにおいておく。
[filename.csv] ColNameHeader=True Format=CSVDelimited Col1=user_id Integer Col2=user_name Char Width 32 Col3=notes LongChar
といった感じ。はじめの一行目が CSV ファイル名をセクションで指定して、二行目がヘッダの有無、三行目はデータファイルの書式(ここでは CSV )を指定してます。それ以降が実際のカラムの指定。
public void Page_Load(Object sender, EventArgs e) { RegisterOnSubmitStatement ("submit", "return window.confirm ('削除します。よろしいですか?');");もしくは、特定のボタンのみに登録したい場合は以下も有効。
public void Page_Load(Object sender, EventArgs e) { Button1.Attributes["onclick"] = "return window.confirm ('削除します。よろしいですか?');";
ASP .NET はコントロールデータが全て一つの BASE64 エンコードされた __VIEWSTATE っていうフォーム変数に格納されてるんだけど、それ用のソフト等を使えば内容が閲覧できるし、書き換えることもできる。
これを暗号化して、改ざんされた際にはエラー処理するようにするようにするには、 web.config で Page.EnableViewStateMac を有効にすればいい。
<configuration> <system.web> <machineKey validation="3DES" /> <pages enableViewStateMac="true" /> </system.web> </configuration>Mac stands for "message authentication check".