ページ間でデータの受け渡し

投稿者: | 2011年11月10日

Session オブジェクトを使えば簡単にフォーム間で受け渡しができる。

例として、TreeViewでノードが選択されたとき、ノードの情報をSessionに格納してから、他のページをリロードする。

Private Sub tree_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tree.SelectedNodeChanged
Session(“myTreeSelectValue”) = DirectCast(sender, TreeView).SelectedValue
Response.Write(“<script language=’JavaScript’>parent.right.location.reload();</Script>”)
End Sub

リロードされたページでは、Sessionから情報を読み込んで、選択された項目の子ノードを一覧表示する。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack() Then
Exit Sub
End IfDim arg As String = Session(“myTreeSelectValue”)If (Not String.IsNullOrEmpty(arg)) Then
‘選択ノードの子ノードを表示
datagrid.DataSource = CreateDataSource(arg)
datagrid.DataBind()
Else
‘未選択
datagrid.DataSource = CreateDataSource(“”)
datagrid.DataBind()
End IfEnd Sub

javascriptでモーダルダイアログを表示

投稿者: | 2011年11月9日

ボタンが押されたとき、モーダルダイアログを表示する。

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAdd.Click

Dim strScr As String
Dim strKey As String

‘同じアドレスでモーダルダイアログを開くと
‘Page_Loadが発生しないことがあるのでQueryStringを設定して毎回アドレスを変更
strKey = Format(Now, “yyyyMMddhhmmss”)

strScr = “<script type=’text/javascript’>”
strScr += “var ret = window.showModalDialog(‘./SelectFileDialog.aspx”
strScr += “?key=” & strKey & “‘,window,’dialogWidth=600px; dialogHeight=150px’);”
strScr += “if (ret == 1) {”
strScr += “}”
strScr += “</script>”

‘Webページに起動スクリプトを登録する
Me.ClientScript.RegisterStartupScript(Me.GetType(), “追加”, strScr)

End Sub

※ダイアログから戻り値で1が返ったとき(OKボタンが押されたとき)の処理は、省略しています。

モーダルダイアログとして表示するフォーム側の処理

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If IsPostBack() Then
Exit Sub
End If

‘IEでモーダルウィンドウを表示する場合は、これが無いと余計なウィンドウを表示してしまう
Response.Cache.SetExpires(DateTime.Now.AddDays(-1))

‘ボタンを押したときにそれぞれのスクリプトを実行する
btnOk.Attributes.Add(“OnClick”, “OnOk()”)
btnCancel.Attributes.Add(“OnClick”, “OnCancel()”)

End Sub

上のOnOk()、OnCancel()のスクリプトはあらかじめフォームに下のような感じで埋め込んでます。

<head runat=”server”>
<title></title>

<!– IEでモーダルウィンドウを表示する場合は、これが無いと余計なウィンドウを表示してしまう  –>
<base target=”_self” />

<script type=”text/javascript” language=”javascript” >
<!–

//初期化
window.onload = function () {
window.returnValue = 0;
}

//決定
function OnOk() {
window.returnValue = 1;
window.close();
}

//キャンセル
function OnCancel() {
window.returnValue = 0;
window.close();
}

//–>
</script>

</head>

CASE文の戻り値の型

投稿者: | 2011年11月8日

int型フィールドの値が0ならば、結果を”(空文字)にしたい場合

このような書き方だと、結果は0になります。

(CASE aaa.[コード] WHEN 0 THEN ” ELSE aaa.[コード] END) AS [コード]

これは、データ型の優先順位があって、暗黙的な変換が行われてしまうことから、”が0に変換されてしまうようです。
データ型の優先順位 (Transact-SQL)

次のように優先順位の低いほうにあわせてCASTすれば、期待どおり結果を”にできます。

(CASE aaa.[コード] WHEN 0 THEN ” ELSE CAST(aaa.[コード] AS VARCHAR) END) AS [コード]

■参考
http://msdn.microsoft.com/ja-jp/library/ms181765.aspx

カテゴリー: SQL

NULL値の変換

投稿者: | 2011年11月8日

SELECT文で取得した値がNULL値になることがある場合、次のような書き方だと、どちらかがNULL値だと、結果がNULL値になってしまいます。

(ensen.[沿線名] + ‘ ‘ + ekimei.[駅名]) AS [最寄駅]

このようなとき、ISNULL関数を使うと、NULL値を変換した結果を得ることができます。

(ISNULL(ensen.[沿線名],”) + ‘ ‘ + ISNULL(ekimei.[駅名],”)) AS [最寄駅]

■参考
http://news.mynavi.jp/articles/2008/10/31/tsql/index.html

カテゴリー: SQL

ModalPopupExtenderでモーダル・ウィンドウを表示

投稿者: | 2011年11月7日

■元ネタ
http://www.atmarkit.co.jp/fdotnet/dotnettips/580aspajaxmodalpopup/aspajaxmodalpopup.html

■手順
1.ASP.NET AJAX Control Toolkitを利用できるようにする
2.モーダル・ウィンドウを表示するためのボタンを追加
3.モーダル・ウィンドウとして表示するパネルを定義
4.ツールボックスからToolkitScriptManagerをドラッグ&ドロップで画面に追加
5.ツールボックスからModalPopupExtenderをドラッグして2のボタンの上でドロップ
6.ソース画面で、ModalPopupExtenderのPopupControlIDに3で定義したパネルのIDを設定
7.その他のプロパティは元ネタを参照

■サンプルプログラム

<form id=”form1″ runat=”server”>
<asp:Button ID=”btnPopup” runat=”server” Text=”ポップアップ” /><asp:ToolkitScriptManager ID=”ToolkitScriptManager1″ runat=”server”>
</asp:ToolkitScriptManager><asp:ModalPopupExtender ID=”btnPopup_ModalPopupExtender” runat=”server”
TargetControlID=”btnPopup” PopupControlID=”pnlDialog” BackgroundCssClass=”modalBackground”
DropShadow=”true” Drag=”true” PopupDragHandleControlID=”pnl”
OkControlID=”btnOk” CancelControlID=”btnCancel”>
</asp:ModalPopupExtender><%–モーダル・ウィンドウとして表示するパネルを定義–%>
<asp:Panel ID=”pnlDialog” runat=”server”>
<asp:Panel ID=”pnl” runat=”server” Wrap=”False” BackColor=”#FFFFFF”>

<table bgcolor=”#000000″ border=”0″ cellpadding=”0″ cellspacing=”0″><tbody><tr><td>
<table border=”0″ cellpadding=”3″ cellspacing=”1″><tbody><tr bgcolor=”#FFFFFF”><td>

<p>てすと</p>
<p>
<asp:Button ID=”btnOk” runat=”server” Text=”決定” />
<asp:Button ID=”btnCancel” runat=”server” Text=”キャンセル” />
</p>

</td></tr></tbody></table>
</td></tr></tbody></table>

</asp:Panel>
</asp:Panel>

</form>


■実行例