ASP.NETでデータソースをいろいろと設定していたりすると、やっぱり限界も見えてきます。
ノーコーディングしましょうといってもいろいろ細かいことをしようとするとやはりClassic ASPに近づいていくという・・・(^^;;
データソースを捨てるとき、(たとえば今回のこの場所では)表示用にデータソースを使っていましたがQueryStringの正当性などを確認する必要があるのでどうしてもPage_Loadでデータを読み込むことになります。
//スレッドが存在するか、スレッドを表示していいか確認する
Wankuma.BBS.Library.スレッド.スレッドデータセット.スレッド一件取得Row row = Wankuma.BBS.Library.スレッド.スレッド管理.スレッド一件取得表示用(ThreadID, this.ユーザID取得());
if (row == null)
{
//存在しないスレッドID
ResponseRedirector.main(Response);
}
this.表示中スレッドデータ行 = row;
さらにこの後表示用にデータソースが同じストアドを呼ぶということになり同じトランザクション内で2回同じ処理を呼んでいることになっていました。
なのでデータソースを捨てて一般的なラベルだけに切り替えます。
<asp:Label ID="ThreadLabel" runat="server" Text='<%# Eval("スレッドタイトル")'></asp:Label><br />
→
<asp:Label ID="ThreadLabel" runat="server" Text='<%# this.表示中スレッドデータ行.スレッドタイトル %>'></asp:Label><br />
この変更だけだとデータバインドするタイミングが無いのでrowを設定する瞬間にデータバインドして回らなくてはいけません。
protected Wankuma.BBS.Library.スレッド.スレッドデータセット.スレッド一件取得Row 表示中スレッドデータ行
{
set
{
this._表示中スレッドデータ行 = value;
this.ThreadLabel.DataBind();
this.BunruiMeiLabel.DataBind();
this.ComponentLabel.DataBind();
this.VersionLabel.DataBind();
}
get
{
return this._表示中スレッドデータ行;
}
}
データバインドして回るのがいやならユーザコントロールを作って直接rowをバインドできるようにするか・・・でしょう。
と微妙に使い勝手の枠を超えようとするとうまくいかないのが最近(ここ5年~10年)のプログラミングスタイルですかね・・・
#.aspx側でバインド指定しているのに、それとペアで.aspx.cs(.vb)側で書かなくっちゃいけないってのがね・・・
##プログラムのバグは移送、あれとこれをセットで実行、シーケンス処理なんかでよくおきるのでねぇ