ASP.Net GridView TextBoxの編集時に他のTextBoxの内容を変更する方法

このQ&Aのポイント
  • ASP.NetのGridView内のTextBoxを編集した際に、他のTextBoxの内容も変更する方法について説明します。
  • 編集状態にあるGridView内のTextBoxのIndexを取得する方法と、TextChangedイベント内でのFindControlメソッドの記述方法について教えてください。
  • GridViewの編集中のTextBoxのIndexを取得する方法や、ローカル関数でのFindControlメソッドの利用方法について分からないので、ご教授いただけるとうれしいです。
回答を見る
  • ベストアンサー

ASP.Net GridView TextBoxで

大変お世話になります。 FormViewにあるGridView を編集状態にした状態で、 Dim Gv As GridView = FormView1.Row.FindControl("GridView1") TextBoxのデータを変更した際に、他のTextBoxの内容を変更したいのですが、 この場合、GridViewのTextBoxのTextChangedイベントを使用しています。 ここで問題なのが、 (1) GridVew の行の Index の取得 (2) TextChangedイベント内での FindControl の記述の仕方 上記のやり方がよくわかりません。 ボタンを使用した場合の Index の取得などはわかるのですが、 GridView1_RowCreated イベントで Dim A As Button = CType(e.Row.FindControl("A"), Button) A.CommandArgument = e.Row.RowIndex.ToString() 上記(1)、(2)はどうしたらよいのかわかりません。 編集状態にあるGridView の Index の取得方法とローカル関数でのFindCotrol メソッドの やり方など、お分かりになる方がいらっしゃいましたら 何卒ご教授いただければと存じます。

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

  • ベストアンサー
  • WebSurfer
  • ベストアンサー率55% (33/59)
回答No.1

> (1) GridVew の行の Index の取得 編集する行のインデックスでいいのですよね。であれば、GridView.EditIndex プロパティで取得できると思います。 > (2) TextChangedイベント内での FindControl の記述の仕方 どこで何を探すのかぐらいは書きましょう。 たぶん編集する行の中で「他のTextBox」を探したいのだと思いますが、編集する行のインデックスが上記 (1) で取得できれば、当該行の GridViewRow を取得できるので、その中を探せばいいのでは?

kyokotan12
質問者

お礼

WebSurfer さん 大変お世話になります。 TextBoxの所在など不明慮な説明ですみませんでした。 ご指摘の、GridView.EditIndexでインデックスを取得し GridView.Rows(GridView.EditIndex).FindControl("コントロール名")で、希望のTextBoxを変更できました。 わたくしの編集時のIndexの取得の仕方の調べ方が悪かったようです。今回大変勉強になりました。 ありがとうございました。

関連するQ&A

  • ASP.Net TextChangedイベント

    お世話になります。 TextChangedイベントの引数に関しまして教えて下さい。 A ・・・ ボタン B ・・・ テキストボックス Aボタンを押したときのイベントの中に、BのテキストボックスのTextChangedイベントも実行させたいのですが、 Protected Sub A_Click(sender As Object, e As System.EventArgs)     Dim A As Button = FormView1.Row().FindControl("A")     Call B_TextChanged( A , e As System.EventArgs)     Sender は Aボタンでいいと思うのですが、     e As System.EventArgs この部分の e にはどのようなモノを入れればいいでしょうか?     (EventArgs派生クラス) と書いてあるのですが、実際どのように記述すればいいのかわかりません。 End Sub 何卒よろしくお願いいたします。

  • ASP.Net GridView の加工

    大変お世話になります。 GridView のテンプレートモードにいくつかのコントロールを配置しております。 コントロールAの値が True なら コントロールBの背景色を変えたいと思っているのですが、 どのイベントでそれらを記述して良いかわかりません。 また、GridView1_DataBinding、GridView1_DataBound、GridView1_RowDataBound などで記述しようとするのですが、これらのイベントでは、FindControl メソッドが使えないのですが、  GridView1_RowDataBound イベントで e.Row.Cells(1).Text = "1" などで記述しないとダメでしょうか? テンプレートにしてしまうと、e.Row.Cells の概念はどういうふうになるなど、わからないことだらけです。 何卒よろしくお願いいたします。

  • GridViewからの値を全件LOOPして取得したい

    GridViewについて教えてください。 <環境>ASP.NET データソースにSQLDataSourceを指定し、GridViewに全件を自動バインドして表示しています。 画面上に設置したボタン押下のイベントハンドラで、そのGridViewの全行をループして各列の値を参照したいのですが、 以下のようなに記述しても(1)の部分でNOTHINGとなりエラーになります。 どのようにすればよいでしょうか? やりたいことは、GridView全行ループし、ITEMKINDの値が"1"の時、TemplateField内にあるtxtNVERCHARの値を取得することです。 ご教授お願いします。 --------------------------------- <Columns> <asp:BoundField DataField="ITEMKIND" HeaderText="ITEMKIND" Visible="False" /> </asp:BoundField> <asp:TemplateField HeaderText="ITEM"> <ItemTemplate> <asp:TextBox CssClass="txtstr" ID="txtNVERCHAR" runat="server" Text='<%# Bind("ITEM_NVERCHAR", "{0}") %>'></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> --------------------------------- Protected Sub 更新_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExec.Click For Each row As GridViewRow In grdList.Rows Dim strITEMKIND As TextBox = DirectCast(row.FindControl("ITEMKIND"), TextBox)  ←(1) IF strITEMKIND.Text = "1" THEN Dim strDDL As TextBox = DirectCast(row.FindControl("txtNVERCHAR"), TextBox) End IF Next End Sub

  • asp.net 計算式について

    お世話になります FormView1内にあるテキストボックス内の計算をさせたいのですが FormView1のTEXTBOXが見当たらず困っています 環境visualstudio2005standard sql web VB 書籍を購入して下記を作成しました。通常なら下記で動作確認は出来ました。 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim intnyuukin As Integer Dim intsiharai As Integer Dim intgoukei As Integer intnyuukin = Val(TextBox1.Text) intsiharai = Val(TextBox2.Text) intgoukei = intnyuukin - intsiharai TextBox3.Text = intgoukei End Sub で合計が計算されのですがFormView1内にあるばあいTextBox1、TextBox2が見当たらないみたいで 宣言させていませんと怒られます。 構成はMultiView1、View1にGridView選択で View2へ移動させてFormViewを表示させて頂いております。 分かる方宜しくお願い申し上げます

  • FormViewRowプロパティで値取得

    VWD2005 + ASP.NETでWebページ作成中で行きづまっています。 Webフォーム上に配置したFormView 内を編集し、 EditItemTemprate 内TextBoxの値 (数値の場合と文字の場合がり)取得をVBのコードで取得したいのですが御教授ください。 よろしくお願いいたします。 以下のように行うと 「FormView1.Row.FindControl("TextBox") 」の部分が 型'System.Web.UIControl'の値を'Integer'に変換できません。とエラーになります。 例: Me.TextBox1.Text = CType(FormView1.Row.FindControl("TextBox"), Integer)

  • GridViewからチェックボックスでデータを選択し、次のページへ送信する動作について

    現在VisualWebDeveloper2005にて、セミナーの申し込みページを作成しています。 動作は、コース一覧(GridView)からチェックボックスで受けたいコースを選択し、GridViewの下にある[申し込む]ボタンを押すとGridViewからチェックがついている行のデータ(コースID)を取得し、次ページに送信→次ページでそのIDをもとにGridViewで詳細情報を表示する確認ページを作成したいと思っています。 GridViewの中にチェックボックスを作成し、チェックボックスがオンになっているもののみ、という部分まではプログラムが完成しているのですが、取得したデータを送信→次ページで受け取り表示の部分がわからずに困っています。 チェックした行のデータをSessionに入れようと考えたのですが 'チェックボックスがオンになっている時、その行のIDを取得してテキストボックスに表示 Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) For Each row As GridViewRow In GridView1.Rows Dim cb As CheckBox = CType(row.FindControl("cbSelect"), CheckBox) If cb.Checked Then Session("test") = row.Cells(1).Text Response.Redirect("kakunin.aspx") End If Next End Sub このプログラムだと複数の項目をチェックしても1つしかデータが送信されないのでどうすればいいかわからない状態です。 3日ほどどうすればいいかを検索してみたのですが、良い答えが見つからなかったので質問させていただきます。よろしくお願いします。

  • TemplateFieldで入力制限

    GridViewについて教えてください。 <環境>ASP.NET データソースにSQLDataSourceを指定し、GridViewに全件を自動バインドして表示しています。 GridViewではTemplateField内にtxtNVERCHARをtxtDECIMALを作成し、txtDECIMAL入力後に"\999,999"と表示するよう "\"とカンマ編集をおこないたいと思っています。 txtDECIMALのTextChangedイベントを使えばいいのかと思ったのですがどのように記述すればよいかわかりません。 ご教授お願いします。 --------------------------------- <Columns> <asp:BoundField DataField="NO" HeaderText="NO" Visible="False" /></asp:BoundField> <asp:TemplateField HeaderText="ITEM"> <ItemTemplate> <asp:TextBox ID="txtNVERCHAR" runat="server" Text='<%# Bind("ITEM_NVERCHAR", "{0}") %>'></asp:TextBox> <asp:TextBox ID="txtDECIMAL" runat="server" Text='<%# Bind("ITEM_DECIMAL", "{0:c}") %>'></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> --------------------------------- Protected Sub txtDECIMAL_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim textbox As TextBox = DirectCast(sender, TextBox) Dim qty As String = textbox.Text ☆ここからが不明☆ End Sub ---------------------------------

  • UpdatePanel と GridViewについて教えてください

    現在、ASP.NET(VB)にて開発を行っています。今悩んでいる事は GridView内でUpdatePanelを使用した際にエラーが表示されます。 エラー内容は下記の通りです。 InvalidCastException はユーザーコードによってハンドルされませんでした。 ______________________________________________________________________ 型 'System.Web.UI.UpdatePanel' のオブジェクト型 'System.Web.UI.WebControl.GridViewRow' にキャストできません。 どなたか、エラーの対処方をご存知の方がいらっしゃいましたらご指導宜しくお願いします。なお、ソースは下記の様に記述してみました。 <%@ Page Language="VB" %> <%@ Import Namespace="System.Data.SqlClient" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim txt As TextBox = DirectCast(sender, TextBox) Dim row As GridViewRow = DirectCast(txt.Parent.Parent, GridViewRow) CD.Text = txt.Text End Sub </script> <html> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="SM" runat="server"> </asp:ScriptManager> <asp:TextBox ID="CD" runat="server" Width="50px"></asp:TextBox> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="CD" DataSourceID="Source" ShowFooter="True"> <Columns> <asp:TemplateField HeaderText="CD"> <ItemTemplate> <asp:Label ID="lbl" runat="server" Text='<%# Bind("CD") %>'></asp:Label> </ItemTemplate> <FooterTemplate> <asp:UpdatePanel ID="UP" runat="server"> <ContentTemplate> <asp:TextBox ID="NewCD" runat="server" AutoPostBack="True" OnTextChanged="TextChanged" Width="50px"></asp:TextBox> </ContentTemplate> </asp:UpdatePanel> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="Source" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStrings %>" SelectCommand="SELECT * FROM [TABLE]" ProviderName="System.Data.SqlClient"> </asp:SqlDataSource> </form> </body> </html>

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • TextBox操作で質問

    TextBox操作で質問 開発環境:Visual Web Developer 2008 express 言語:Visual Basic TextBoxを縦5行横3列に並べ、2列目のTextBox(番号…2,5、8、11、14)に文字列があり、1列目のTextBox(番号…1、4、11、10、13)に文字がなかったら、1列目のTextBoxに”あ”の文字列を付加する、のようなことをしたいのですが、2列目に文字列がなくても、1列目に"あ"の文字列が入ってしまいます。どこが悪いのか分かりませんのでご教授願います。 ###入力フォーム###   ううう おおお い ううう おおお   ううう おおお      ↓ ###現状の出力結果#### あ ううう おおお い ううう おおお あ ううう おおお あ あ ###実際に出したい結果### あ ううう おおお い ううう おおお あ ううう おおお Dim i As Integer Dim j As Integer For i = 1 To 13 Step 3 For j = 2 To 14 Step 3 If CType(FindControl("TextBox" & j), TextBox).Text = "" Then If CType(FindControl("TextBox" & i), TextBox).Text = Nothing Then CType(FindControl("TextBox" & i), TextBox).Text = "あ" End If End If Next Next

専門家に質問してみよう