こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

-入力データの引渡しについて-

お世話になっています。

只今、VisualStudio.NetのASP&C#.Netで開発を行っているのですが・・・動的に追加したテーブルのRow内のデータ取得で困っています。

現状としましては・・・初期画面ではテーブルのヘッダ部しか表示せず、DBに接続して取得したデータ件数分・・・

// 行を生成
HtmlTableRow row = new HtmlTableRow();
// セルを生成
HtmlTableCell cell = new HtmlTableCell();
// セルにテキストボックスを埋め込む
cell.InnerHtml = "<input type=text name=txbNAME>"
// 行にセルを追加
row.Cells.Add(cell);
// テーブルに行を追加
TABLE.Rows.Add(row);

・・・上記のようにして、動的にテーブルの行を追加しています。

追加後の画面表示に関しては、正常に表示されているのですが、その後のイベントで画面上のデータを取得しようとすると、TABLEは初期のヘッダ部のみ(Length=1)になり、追加した行のデータを取得することが出来ません。

色々試したのですが「 Page_Loadメソッド 」の時点でTABLEの行はヘッダ部のみでした。

このような状況で動的に追加した行のデータを取得方法はありますか??

・・・非常に困っています。

投稿日時 - 2002-10-09 13:58:31

QNo.376944

困ってます

質問者が選んだベストアンサー

>この処理と同じ事をフォームに対応した
>.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);
}

投稿日時 - 2002-10-20 00:04:40

お礼

わかりました。
毎度毎度ありがとう御座います。
本当に助かりました。

投稿日時 - 2002-10-21 14:56:01

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

>上記のエラーは行、列が3,3以上で発生します。
だって2×2だけ
うまくいくように作りましたから。

投稿日時 - 2002-10-17 20:54:36

補足

そうだったんですか・・・ありがとう御座います。

今回は、JavaScriptで処理していますが、この処理と同じ事をフォームに対応した.csファイルで処理する事って可能ですか??

<%@ Page language="c#" Codebehind="SampleForm.aspx.cs" AutoEventWireup="false" Inherits="SampleForm" %>

毎度毎度、面倒掛けます。

投稿日時 - 2002-10-18 15:59:43

ANo.5

あれあれ。
>行 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">
ここも違っていますよ。

改造しちゃいましたね?

↑の各行の最後の > を /> こうしてください。

投稿日時 - 2002-10-15 22:31:06

補足

ありがとう御座います。
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

毎度毎度すみません。

投稿日時 - 2002-10-16 18:53:24

お礼

上記のエラーは行、列が3,3以上で発生します。
何故なんでしょうか??

投稿日時 - 2002-10-17 10:38:36

ANo.4

あれ?
私の書いたのには
>行 36: <form runat="server" ID="Form1">
これ、無いんだけど・・・・・
改造したの?

投稿日時 - 2002-10-15 21:49:33

ANo.3

>・・・どうしましょう??
ありゃりゃ。
私のは上手に動いたんですけど。
拡張子はaspxですよね?

投稿日時 - 2002-10-15 21:42:46

ANo.2

ごめんなさい。
値を取得していませんね。

Table2.Rows[i].Cells[j].InnerHtml = "Row " + i.ToString() + ", Column " + j.ToString();
を、
Table2.Rows[i].Cells[j].InnerHtml = Table1.Rows[i].Cells[j].InnerHtml;
こうしてね。

投稿日時 - 2002-10-12 16:59:39

補足

返事遅くなってすみません・・・

早速試してみたのですが、画面の表示の時点で下記のエラーが出てしまいました。

解析エラー
説明 : この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。

解析エラー メッセージ: オブジェクト参照がオブジェクト インスタンスに設定されていません。

ソース エラー:


行 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">

・・・どうしましょう??

投稿日時 - 2002-10-15 21:26:21

ANo.1

<%@ 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>

投稿日時 - 2002-10-12 12:50:41

あなたにオススメの質問