- PR -

DataGridの行編集ボタン→新しいWindowで編集

1
投稿者投稿内容
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-23 18:07
いつも参考にさせていただいております。
ページ(A)のDataGridの行編集ボタンを押すと、新しいページ(B)が開き、
ページ(B)でデータ編集を行い、更新ボタンを押すことで呼び出し元のページ(A)
に戻る。
ということをしたい思っています。

ページ(A)のボタンは次のように記述しました。
<asp:TemplateColumn>
 <ItemStyle VerticalAlign="Middle"></ItemStyle>
  <ItemTemplate>
   <asp:Button runat="server" Text="編集" CommandName="Edit"
    CausesValidation="false" Visible='<%# CStr(Container.DataItem("inpid"))
    = CStr(Session("id")) %>' Height="20px" Width="50px">
   </asp:Button>
 </ItemTemplate>

ボタンクリックでdatagrid内のboundcolumnの数値項目をパラメータとして
urlに付けて、新しいページを開きたいのですが、どうしたらいいでしょうか?
また、数値項目はレコードキーで次のページ(B)で再度データを読んで、表示させる
ためなのですが、こういった処理の場合、datasetやdatarowをそのまま送った方が
スマートなのでしょうか?
初心者なのでわからないことが多く申し訳ありませんが、ご教授の程よろしくお願いします。
一応過去ログなど参考にさせていただきましたが、うまく来ませんでした。
見落としていましたらすみません。m(__)m。
そうまさん
常連さん
会議室デビュー日: 2003/07/17
投稿数: 27
お住まい・勤務地: ジャポン
投稿日時: 2005-05-24 15:20
こんにちはそうまです。

とりあえずDataGridの編集ボタンで、
新しいページを開こうというはJavaScript併用で実現できました。

<javascript>
 function WinOpen(inpid)
 {
  URL = '新しいページ(B)のURL?ID=' + inpid;
  window.open(URL);
 }
</javascript>

----以下ボタンコントロール部----
<asp:TemplateColumn>
 <ItemTemplate>
  <INPUT id="btnEdit" onclick='javascript:WinOpen("<%# DataBinder.Eval(Container.DataItem, "inpid") %>");' type="button" value="編集" name="submitEdit">
 </ItemTemplate>
</asp:TemplateColumn>">

CStr(Session("id"))とあるので、
Sessionから"inpid"を取っているように思われますが、
どういう仕組みかいまいち理解できていません^^;

回答ではなく参考までにということで。。。
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-24 15:32
そうまさん こんにちは
お忙しい中アドバイスありがとうございました。
僕の投稿がわかりづらくてすみませんでした。
一応先程次のように出来ました。

Dim intdno As Integer = dgrd_Rireki.DataKeys(e.Item.ItemIndex)

Dim strScript As String = ""
strScript &= "<script language=javascript>"
strScript &= "var features ='Height=250,Width=165';"
strScript &= "window.open('pageb.aspx?dno="
strScript &= intdno & "'"
strScript &= ",'',features);"
strScript &= "</script>"
Response.Write(strScript)

.NETって基本の仕組みがわからないと樹海に迷い込んだ感じ
になりますね。
これからもよろしくお願いします。
そうまさん
常連さん
会議室デビュー日: 2003/07/17
投稿数: 27
お住まい・勤務地: ジャポン
投稿日時: 2005-05-24 15:45
こんにちはそうまです。

無事解決何よりです。

私もまだまだ未熟ゆえいつも樹海に迷い込んでいます。
しかし、なるべく答えられそうなものは答えてもしその考え方が間違っていたら
また勉強になるのではと思い回答にチャレンジし始めました。

お互い勉強しないといけないことがたくさんあるのかもしれませんが、
めげずにがんばりましょう。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-24 22:48
 クライアントにスクリプトを実行させるためにResponse.Writeメソッドを使ってはいけません。なぜいけないかは、クライアントにダウンロードされたソースファイルを見てください。HTMLの構文になっていません。

 Page.RegisterStartupScriptメソッドを使いましょう。


 それと、文字列を&で連結するのは、非常にコストの高い操作です。スクリプト宣言なども決まり文句なので、System.Text.StringBuilderを使ってみましょう。
コード:
' スクリプトの共通部分を追加する
Public Shared Sub BuildScriptBlock(ByVal ScriptBlock As System.Text.StringBuilder)
	ScriptBlock.Insert(0, ControlChars.CrLf)
	ScriptBlock.Insert(0, "<!--")
	ScriptBlock.Insert(0, ControlChars.CrLf)
	ScriptBlock.Insert(0, "<script language='javascript'>")
	ScriptBlock.Append(ControlChars.CrLf)
	ScriptBlock.Append("// -->")
	ScriptBlock.Append(ControlChars.CrLf)
	ScriptBlock.Append("</script>")
End Sub



_________________
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-28 08:28
Jittaさん ありがとうございました。
出張で不在だったもので連絡が遅くなってしまいました。
すみませんでした。
Jittaさんがおっしゃった
>HTMLの構文になっていません。
は下記の部分でしょうか?

<script language="javascript" type="text/javascript">
<!--
 function __doPostBack(eventTarget, eventArgument) {
 var theform;
 if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
  theform = document.Form1;
  }
 else {
  theform = document.forms["Form1"];
  }
 theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
 theform.__EVENTARGUMENT.value = eventArgument;
 theform.submit();
  }
// -->
</script>
ちなみに<HTML>タグで始まっているのですが、それだけでは
良くないのですね。

現在ページ(B)はcalendarコントロールとラベルを配置しただけの
単純なページでテストを行っております。
前回発言の通りResponse.Writeメソッドにて表示されたので
結果オーライで考えておりました。
やはりきちんと基本を押さえないといけないですね。

System.Text.StringBuilderのご教授ありがとうございます。
今までのクセで文字列連結は&以外考えもしませんでした。
んーーさらに奥が広い。
これからもよろしくお願いします。
てっちゃん
常連さん
会議室デビュー日: 2005/05/10
投稿数: 23
投稿日時: 2005-05-29 08:18
Jittaさん おはようございます。
Response.Write の部分をRegisterStartupScriptに
変更してみたのですが、表示されるページ(B)の
ソースは同じでした。
僕のケースではどちらでも変わらないのでしょうか?
参考までに途中経過を報告します。
1

スキルアップ/キャリアアップ(JOB@IT)