• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:-入力データの引渡しについて-)

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

このQ&Aのポイント
  • VisualStudio.NetのASP&C#.Netで開発を行っている際、動的に追加したテーブルのRow内のデータ取得で困っています。
  • 初期画面ではテーブルのヘッダ部しか表示せず、DBに接続して取得したデータ件数分、行を生成していますが、取得後の画面で追加した行のデータを取得する方法がわかりません。
  • Page_Loadメソッドの時点でテーブルの行はヘッダ部のみであり、動的に追加した行のデータを取得する方法を教えてください。

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

  • ベストアンサー
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.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); }

noname#30420
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.6

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

noname#30420
質問者

補足

そうだったんですか・・・ありがとう御座います。 今回は、JavaScriptで処理していますが、この処理と同じ事をフォームに対応した.csファイルで処理する事って可能ですか?? <%@ Page language="c#" Codebehind="SampleForm.aspx.cs" AutoEventWireup="false" Inherits="SampleForm" %> 毎度毎度、面倒掛けます。

全文を見る
すると、全ての回答が全文表示されます。
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.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"> ここも違っていますよ。 改造しちゃいましたね? ↑の各行の最後の > を /> こうしてください。

noname#30420
質問者

お礼

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

noname#30420
質問者

補足

ありがとう御座います。 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)
回答No.4

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

全文を見る
すると、全ての回答が全文表示されます。
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.3

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

全文を見る
すると、全ての回答が全文表示されます。
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.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; こうしてね。

noname#30420
質問者

補足

返事遅くなってすみません・・・ 早速試してみたのですが、画面の表示の時点で下記のエラーが出てしまいました。 解析エラー 説明 : この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。 解析エラー メッセージ: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ソース エラー: 行 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)
回答No.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>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • GridViewにバインドせずにデータを表示する方法

    環境:VS2008&VB.NET&ASP GridViewに手動でテーブルからデータを読みデータバインドせず DBの値を表示する方法を考えていますがうまくいかず困っています。 (データバインドしたくない理由はデータバインドを行っていると行の挿入や移動ができない認識のためです。) 初心者のため見当違いなことをしているかもしれませんが それも含めまして質問させていただきます。 質問1 そもそもGridViewでデータバインドせずに手動でデータを表示することは可能でしょうか。 質問2 以下のコードで試しましたが「GridView1.Controls(0).Controls.Add(row1)」でExeptionが発生してしまいました。 手順に不適格な箇所があるのでしょうか。 strSql = "SELECT * FROM Data_Table" Using connection As New SqlClient.SqlConnection(cnStr) Dim command As New SqlClient.SqlCommand(strSql, connection) connection.Open() Dim dr As SqlClient.SqlDataReader = command.ExecuteReader While (dr.Read = True) 'データあり str1 = dr("data1") str2 = dr("data2") str3 = dr("data3") End If connection.Close() Dim item1 As DataGridItem item1 = New DataGridItem(-1, -1, ListItemType.Item) Dim cell0 As TableCell = New TableCell item1.Cells.Add(cell0) Dim cell1 As TableCell = New TableCell item1.Cells.Add(cell1) Dim cell2 As TableCell = New TableCell item1.Cells.Add(cell2) Dim row1 As New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal) row1.Cells.Add(cell0) row1.Cells.Add(cell1) row1.Cells.Add(cell2) GridView1.Controls(0).Controls.Add(row1) End While End Using エラーの内容 System.ArgumentOutOfRangeException はユーザー コードによってハンドルされませんでした。 Message="指定された引数は、有効な値の範囲内にありません。 パラメータ名: index" お力添えをよろしくお願い致します。

  • .NETのGridViewでテストデータの投入方法

    Microsoft Visual Studio 2008を使用しています。 ASP.NETのGridViewで、データソースを使用せずにテストデータを投入する方法を教えて下さい。 情けないくらいの初心者です。どうか助けてください。 表示だけを確認して画面整形したいので、データ部に『12345』などのテストデータを投入して表示させたいのですが、そのやり方が分かりません。 GridView自体の設置と、列の追加までは出来ています。が、肝心のデータを入れられないためにプレビューしても真っ白になってしまいます。 検索して調べた結果、ダミーのデータテーブルを作成してバインドする方法があったのですが、それをどこに書けばいいのか、また、関数名??をどうしたらいいのかが分かりません。 失礼ながら拾ったソースをそのまま拝借すると… DataTable table = new DataTable(); table.Columns.Add("data1"); table.Columns.Add("data2"); DataRow row1= table.NewRow(); row1["data1"] = "value1-1"; row1["data2"] = "value1-2"; table.Rows.Add(row1); DataRow row2 = table.NewRow(); row2["data1"] = "value2-1"; row2["data2"] = "value2-2"; table.Rows.Add(row2); GridView1.DataSource = table; GridView1.DataBind(); これを、vbの方に記述すればいいのでしょうか? また、function名といいますか、sub名?をどうしたらいいのかがわかりません。。 デザイン画面上でダブルクリックして自動生成されるソースだと Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged End Sub になるので、ちょっと違う気がします・・。 上の拝借したソースよりも、もう少し分かりやすく記述していただけると大変嬉しいです・・。 本当に本当に初心者で申し訳ありません!!! とても困っているので、どうか助けてください、宜しくお願い致します!

  • java Excel書き込み

    前回質問をさせて頂き、 教えて頂いたプログラムを参考にしましたところうまくいきました。 ところがここでまた1つ問題点が発生してきてしまいました。 業務日報には4つの項目があり、そこを入力すると1行目のDセルまで値が入ります。 次にシステムから上書きをすると正常に2行目に書き込みはされるのですが、1行目のBCDセルの情報が消えてしまい、Aセルのみ残った状態になっています。 これを繰り返すと最新で書き込みした行以外の物はすべてAセルしか情報が残らなくなってしまいます。 この現象を回避するにはどうすればよいのでしょうか? アドバイス宜しくお願いいたします。 public void execute() { FileInputStream in = null; HSSFWorkbook workbook = null; HSSFSheet sheet = null; try { // test.xlsを読み込んでみる // 読み込めた場合は既存のファイルを利用する in = new FileInputStream("test.xls"); workbook = new HSSFWorkbook ( in ); sheet = workbook.getSheetAt ( 0 ); } catch ( IOException e ) { // test.xlsが読み込めない場合はここで新規作成 workbook = new HSSFWorkbook(); sheet = workbook.createSheet("test"); // 見出しを作る Row row = sheet.createRow(0); Cell cell1 = row.createCell(0); Cell cell2 = row.createCell(1); Cell cell3 = row.createCell(2); Cell cell4 = row.createCell(3); cell1.setCellValue("会社"); cell2.setCellValue("報告者"); cell3.setCellValue("場所"); cell4.setCellValue("時間"); } // 行を1行目から走査する // 1行目は見出しのため、チェック対象外 Row row = null; Cell cell1, cell2, cell3, cell4 = null; int i = 1; for ( ; ; i ++ ) { // i番目を取得する row = sheet.getRow(i); if ( row == null ) // i番目が取得できなかったら行を作成 row = sheet.createRow(i); // 0番目のセルを取得する cell1 = row.getCell(0); if ( cell1 == null ) // 0番目のセルが取得できなかったら新規作成 cell1 = row.createCell(0); cell2 = row.createCell(1); cell3 = row.createCell(2); cell4 = row.createCell(3); // そのセルに値が入っていない場合はループを抜ける if ( "".equals(cell1.getStringCellValue()) ) break; } // 値の入っていないセルでループを抜けるため、すなわち最新の行に内容を書き込む cell1.setCellValue(CompanyInput.getText()); cell2.setCellValue(NameInput.getText()); cell3.setCellValue(WhereInput.getText()); contents4.setCellValue(TimeInput.getText()); try { if ( in != null ) in.close(); } catch ( IOException e ) { e.printStackTrace(); } FileOutputStream out = null; try { // ファイルの書き出し out = new FileOutputStream("test.xls"); workbook.write ( out ); } catch ( IOException e ) { e.printStackTrace(); } finally { try { out.close(); } catch ( IOException e ) { e.printStackTrace(); } } } }

    • ベストアンサー
    • Java
  • この行は既に別のテーブルに属しています

    以下のソースで、「この行は既に別のテーブルに属しています。」というエラーが出てしまいますが、対処方法がわかりません。 どのようにしたらよろしいでしょうか? VS2003のVBです。     Dim Table1 As DataTable = Me.DS1.Tables("データベース1")     Dim Table2 As DataTable = Me.DS1.Tables("データベース2")     Dim Row1 As DataRow     Dim Row2 As DataRow     Row1("データ1") = 1     Row1("データ2") = 2     Row1("データ3") = 3     Row2("データ1") = 2     Row2("データ2") = 3     Row2("データ3") = 4     Table2.Rows.Add(Row2) ←ここでエラー     Table1.Rows.Add(Row1) 'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。 追加情報 : この行は既に別のテーブルに属しています。

  • sqliteへのデータ追加

    sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>

  • DataGridViewに関して

    開発:Visual Basic 2008 考え方の質問になってしまうかもしれませんが教えて下さい。 Datagridviewを用いて、データの入力をさせたいと考えています。 但し、入力だけでなく画面にある表示ボタンを押した際には、テーブルに格納されている データを検索しに行き、その内容を表示させたいと考えています。 Datagridviewはフォームに貼り付け、各項目を一つずつ作成してあります。 しかし、この場合、以下のような記述をすると(そもそも記述が違うかと思われますが・・・)、 もともと作成してある項目(列)にデータがセットされず、新規で列を作ってしまいます。 《記述内容》 '変数の宣言 Dim dtSet As DataSet = New DataSet("PRODUCTS") Dim dtTable As DataTable 'データセットにテーブルを追加する dtTable = dtSet.Tables.Add("A_TBL") 'テーブルにフィールドを追加する '.Add("フィールド名", フィールドの型)で追加します dtTable.Columns.Add("AAA", Type.GetType("System.String")) Dim data_row As DataRow = dtTable.NewRow() data_row("AAA") = PIN_AAA dtTable.Rows.Add(data_row) 'DataGridにデータを表示する G_BBB.DataSource = dtSet.Tables(0) そもそもDatagridviewを用いて、入力や表示を行うにはどのような形にするのが 良いのでしょうか? Datasetとか使う? 教えて頂きたいと思います。 よろしくお願いします。

  • C# DataGridViewにデータを追加したい。

    C# DataGridViewにデータを追加したい。 追加ボタンでDataGridViewにデータを挿入したいのですが、うまくいきません。 DataGridViewRowCollection.Add(new Object[] { 7, 777, 777, 777 }); などとしてみたのですが、オブジェクトがありませんとエラーしてしまいます。 dataGridView1.DataGridViewRowCollection.Add(new Object[] { 7, 777, 777, 777 }); としてみてもエラーが出てしまいます。 1行だけ新規にデータを挿入したい場合はどの様に記述すれば良いのでしょうか? アドバイスよろしくお願いいたします。

  • カレント行の特定の列のセルの値を表示させたい

    Excel2002で縦に数百行、横に20列ほどの商品リストがあります。 目指す行はオートフィルタで抽出できますが、この時画面に表示しきれない離れた列のデータを見たいことが結構あります。 「カレントセルがある行のn列目を常にA1セルに表示させる方法」をお教えください。 =INDIRECT(ADDRESS(CELL("row"),13)) =CELL("contents",INDIRECT(ADDRESS(CELL("row"),13))) 等では、カレントセルを選択するだけでは表示してくれず、何か入力してEnterとかTABキーを押さないと結果に反映されません。 クリックした後でF9キーを押して再計算するのは間違いの元ですので、できればクリックした瞬間に結果を出したいのです。

  • htmlで固定テーブルに可変データの表示の仕方

    htmlで5×4の固定テーブルにJavaScriptで取得したデータを表示させたいですが、 やり方が分かりません。 表示データ分テーブル行を追加表示することはできますが、表示は5行目までで、 6行目はスクロールして表示するようにしたいです。 さらに、5行固定で表示データが3行の場合空白2行も表示させたい。 具体的な方法や参考サイトを教えて下さい。 よろしくお願いします。

  • データ取得後、JTABLE列幅を変更できませんか

    データベースからデータを取得して(ResultSetMetaData)、Jtableに表示したのですが、列幅を項目ごとに変更したいのですが、できるのでしょうか? 項目ヘッダーはできたのですが。。。 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); colname = new ArrayList<String>(cnum); //列名の取得 String[] hder = {"月日","区分","コード","商品"}; for(int i=1; i<=cnum; i++){ colname.add(hder[i-1]); } //行の取得 data = new ArrayList<ArrayList>(); while(rs.next()){ ArrayList<String> rowdata = new ArrayList<String>(); for(int i=1; i<=cnum; i++){ if (rs.getObject(i)==null){ rowdata.add("");} else{ rowdata.add(rs.getObject(i).toString());} } data.add(rowdata); } 表示はできるのですが、各項目ごとに列幅が、しようとMaxsizeとかsetPreferredWidth などを行ってもうまくでいきません。