- ベストアンサー
-入力データの引渡しについて-
- VisualStudio.NetのASP&C#.Netで開発を行っている際、動的に追加したテーブルのRow内のデータ取得で困っています。
- 初期画面ではテーブルのヘッダ部しか表示せず、DBに接続して取得したデータ件数分、行を生成していますが、取得後の画面で追加した行のデータを取得する方法がわかりません。
- Page_Loadメソッドの時点でテーブルの行はヘッダ部のみであり、動的に追加した行のデータを取得する方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>この処理と同じ事をフォームに対応した >.csファイルで処理する事って可能ですか?? .csファイルは今のところ作る気がないので、 .jsで書きますが、 ><%@ Page language="c#" Codebehind="SampleForm.aspx.cs" AutoEventWireup="false" Inherits="SampleForm" %> は分かりませんです。 <%@ Page Language="JScript" debug="true" %> <html> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <SCRIPT LANGUAGE=javascript src="CopyTable.js" RUNAT=Server> </SCRIPT> </head> <body> <P></P> <form runat="server"> 行<input id="inp_row" type="text" value="1" runat="server"/> <BR> 桁<input id="inp_cel" type="text" value="1" runat="server"/> <BR> <P><input type="submit" value="テーブル作成" runat="server"/></P> <P> <table id="Table1" CellPadding="5" CellSpacing="0" Border="1" BorderColor="black" runat="server"/></P> <P> <input TYPE="button" value="テーブルの複製" OnServerClick="Button2_Click" runat=server /> </P> </form> </body> ----CopyTable.js----- function Page_Load(Src : Object, e : EventArgs ) : void { var numrows : int = Convert.ToInt32(inp_row.Value); var numcells : int = Convert.ToInt32(inp_cel.Value); for (var j : int =0; j<numrows; j++){ var row : HtmlTableRow = new HtmlTableRow(); if (j%2 == 1) row.BgColor="Gainsboro"; for (var i : int =0; i<numcells; i++){ var cell : HtmlTableCell = new HtmlTableCell(); cell.Controls.Add(new LiteralControl("row " + j.ToString() + ", cell " + i.ToString())); row.Cells.Add(cell); } Table1.Rows.Add(row); } } function Table(src) { var tbl = new System.Web.UI.HtmlControls.HtmlTable(); tbl.CellPadding="5"; tbl.CellSpacing="0"; tbl.Border="1"; tbl.BorderColor="black"; var numrows : int = src.Rows.Count; var numcells : int = src.Rows[0].Cells.Count; for (var j : int =0; j<numrows; j++){ var row : HtmlTableRow = new HtmlTableRow(); if (j%2 == 1) row.BgColor="Gainsboro"; for (var i : int =0; i<numcells; i++){ var cell : HtmlTableCell = new HtmlTableCell(); row.Cells.Add(cell); } tbl.Rows.Add(row); } for (i=0; i<=src.Rows.Count - 1; i++){ for (j=0; j<=src.Rows[i].Cells.Count - 1; j++){ tbl.Rows[i].Cells[j].InnerHtml = src.Rows[i].Cells[j].InnerHtml; } } Page.Controls.Add(tbl); } function Button2_Click(Src, e : EventArgs ){ Table(Table1); }
その他の回答 (6)
- ittochan
- ベストアンサー率64% (2667/4137)
>上記のエラーは行、列が3,3以上で発生します。 だって2×2だけ うまくいくように作りましたから。
補足
そうだったんですか・・・ありがとう御座います。 今回は、JavaScriptで処理していますが、この処理と同じ事をフォームに対応した.csファイルで処理する事って可能ですか?? <%@ Page language="c#" Codebehind="SampleForm.aspx.cs" AutoEventWireup="false" Inherits="SampleForm" %> 毎度毎度、面倒掛けます。
- ittochan
- ベストアンサー率64% (2667/4137)
あれあれ。 >行 37: <table id="Table1" CellPadding="5" CellSpacing="0" Border="1" BorderColor="black" runat="server"> ここと >行 38: 行<INPUT id="inp_row" type="text" value="1" runat="server" NAME="inp_row"> ここと >行 40: 桁<INPUT id="inp_col" type="text" value="1" runat="server" NAME="inp_col"> ここも違っていますよ。 改造しちゃいましたね? ↑の各行の最後の > を /> こうしてください。
お礼
上記のエラーは行、列が3,3以上で発生します。 何故なんでしょうか??
補足
ありがとう御座います。 OKWebから、コピーして貼り付けたので、勝手に変わってしまったようです。 確認して、画面とテーブル作成まではうまく動作しましたが、値取得で下記のエラーが出ました。 '/' アプリケーションでサーバー エラーが発生しました。 -------------------------------------------------------------------------------- 指定された引数は、有効な値の範囲内にありません。パラメータ名 : index 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.ArgumentOutOfRangeException: 指定された引数は、有効な値の範囲内にありません。パラメータ名 : index ソース エラー: 行 27: for (var i : int=0; i<=Table1.Rows.Count - 1; i++){ 行 28: for (var j : int =0; j<=Table1.Rows[i].Cells.Count - 1; j++){ 行 29: Table2.Rows[i].Cells[j].InnerHtml = Table1.Rows[i].Cells[j].InnerHtml; 行 30: } 行 31: } ソース ファイル : c:\inetpub\wwwroot\aspsample\SampleForm.aspx 行 : 29 スタック トレース: [ArgumentOutOfRangeException: 指定された引数は、有効な値の範囲内にありません。 パラメータ名 : index] System.Web.UI.ControlCollection.get_Item(Int32 index) System.Web.UI.HtmlControls.HtmlTableCellCollection.get_Item(Int32 index) ASP.SampleForm_aspx.Button2_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\aspsample\SampleForm.aspx:29 System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) System.Web.UI.Page.ProcessRequestMain() -------------------------------------------------------------------------------- バージョン情報 : Microsoft .NET Framework バージョン :1.0.3705.0; ASP.NET Version:1.0.3705.0 毎度毎度すみません。
- ittochan
- ベストアンサー率64% (2667/4137)
あれ? 私の書いたのには >行 36: <form runat="server" ID="Form1"> これ、無いんだけど・・・・・ 改造したの?
- ittochan
- ベストアンサー率64% (2667/4137)
>・・・どうしましょう?? ありゃりゃ。 私のは上手に動いたんですけど。 拡張子はaspxですよね?
- ittochan
- ベストアンサー率64% (2667/4137)
ごめんなさい。 値を取得していませんね。 Table2.Rows[i].Cells[j].InnerHtml = "Row " + i.ToString() + ", Column " + j.ToString(); を、 Table2.Rows[i].Cells[j].InnerHtml = Table1.Rows[i].Cells[j].InnerHtml; こうしてね。
補足
返事遅くなってすみません・・・ 早速試してみたのですが、画面の表示の時点で下記のエラーが出てしまいました。 解析エラー 説明 : この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。 解析エラー メッセージ: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソース エラー: 行 36: <form runat="server" ID="Form1"> 行 37: <table id="Table1" CellPadding="5" CellSpacing="0" Border="1" BorderColor="black" runat="server"> 行 38: 行<INPUT id="inp_row" type="text" value="1" runat="server" NAME="inp_row"> 行 39: <BR> 行 40: 桁<INPUT id="inp_col" type="text" value="1" runat="server" NAME="inp_col"> ・・・どうしましょう??
- ittochan
- ベストアンサー率64% (2667/4137)
<%@ Page Language="JScript" Debug="true" %> <html> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <script runat="server"> function Page_Load(sender, e : EventArgs) { var numrows : int = Convert.ToInt32(inp_row.Value); var numcells : int = Convert.ToInt32(inp_col.Value); for (var j : int =0; j<numrows; j++){ var row : HtmlTableRow = new HtmlTableRow(); if (j%2 == 1) row.BgColor="Gainsboro"; for (var i : int =0; i<numcells; i++){ var cell : HtmlTableCell = new HtmlTableCell(); cell.Controls.Add(new LiteralControl("row " + j.ToString() + ", cell " + i.ToString())); row.Cells.Add(cell); } Table1.Rows.Add(row); } } function Button2_Click(sender, e : EventArgs){ for (var i : int=0; i<=Table1.Rows.Count - 1; i++){ for (var j : int =0; j<=Table1.Rows[i].Cells.Count - 1; j++){ Table2.Rows[i].Cells[j].InnerHtml = "Row " + i.ToString() + ", Column " + j.ToString(); } } } </script> </head> <body> <form runat="server"> <table id="Table1" CellPadding="5" CellSpacing="0" Border="1" BorderColor="black" runat="server"/> <hr>行<input id="inp_row" type="text" value="1" runat="server"/> <BR> 桁<input id="inp_col" type="text" value="1" runat="server"/> <BR> <input type="submit" value="テーブル作成" runat="server"/> <P> <INPUT TYPE="button" value="値の取得" OnServerClick = "Button2_Click" runat="server"/></P> <table id="Table2" CellPadding="5" CellSpacing="0" Border="1" BorderColor="black" runat="server"> <TR><TD></TD><TD></TD> </TR> <TR><TD></TD><TD></TD> </TR> </TABLE> </form> </TABLE> <P>最初に「行」、「桁」に2を入力して<BR> 「テーブル作成」をクリック<BR> ↓<BR> その後、「値の取得」をクリックしてみて。</P> <P>参考になればいんですが。</P> </body>
お礼
わかりました。 毎度毎度ありがとう御座います。 本当に助かりました。