ASP.Net GridView 非連結フィールドとは?

このQ&Aのポイント
  • ASP.Net GridViewでは、テンプレートフィールドを使用して非連結のテキストボックスを設置することができます。
  • しかし、プログラム上では非連結のテキストボックスの値を取得する際に空白が返ってしまうことがあります。
  • 上記のコードでも非連結のテキストボックスの値を取得することはできません。
回答を見る
  • ベストアンサー

ASP.Net GridView 非連結フィールド

大変お世話になっております。 GirdView 3番目のセルをテンプレートフィールドにして そこに非連結のテキストボックスを設置しております。 各行の非連結のテキストボックスに数字を入力して ボタンクリックにより、その値を取得したいのですが、 下記のプログラムでは、空白が返ってきてしまいます。 非連結のテキストボックスの値を取得するには下記では ダメなのでしょうか? ご指摘などございましたら、何卒ご助言いただけますと 嬉しい限りでございます。   For I = 0 To Me.GridView1.Rows.Count - 1     MsgBox(DirectCast(Me.GridView1.Rows(I).Controls(2), DataControlFieldCell).Text)   Next

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

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.1

このプログラムだとGridView 3番目のセル(DataControlFieldCell)が持つTextプロパティの中身を表示しようとしませんか? セルの中にあるテキストボックスのTextプロパティをひろってくる必要があると思います。 あと、たぶんテスト的に実行して中身を確認したいためにMsgBox使ってるんだと思いますけど、サーバサイドのプログラムではMsgBoxは動作しないものですので気をつけてください。 どっかでこのようなデバッグ方法紹介されてたのたしかに見た記憶あるけど、問題だなぁ、と思ってました。 VSでブレークポイントつけてウォッチで中みたほうがいいです。 で、ウォッチでGridView1の内部構造たどっていくと、上記プログラムが間違ってる部分もわかると思います。

kyokotan12
質問者

お礼

onos さん 大変お世話になります。 Me.GridView1.Rows(I).FindControl("TEST") 上記をテキストボックスの変数に代入する形で値が参照できました。 ありがとうございました。

kyokotan12
質問者

補足

onos さん お世話になります。 MsgBox に関してはデバック以外では動作しないのは承知していましたが、楽だったので使っておりました。 ご指摘があったので以後はブレークポイントでのウォッチの方法に移行しようと思います。 なるほど3番目のセルのDataControlFieldCellの中のテキストボックスのTextプロパティを拾わないとダメですね! ボタンクリックイベントでのプログラムで DataControlFieldCellの中にあるテキストボックスのTextプロパティはどうやって見るんでしょうか? DirectCast(me.GridView1.FindControl("TEST"), TextBox) で値は代入されないみたいなんですが、この場合何を使えばよろしいでしょうか? ご指摘がございましたらよろしくお願いいたします。

関連するQ&A

  • gridviewでの高さの取得方法

    gridviewの各行の高さを取得する方法を教えていただけないでしょうか? gridview.Rows(0).Height.ToStringを行っても、空白になってしまいます。 gridview.Rows(0).Cells(0).Height.ToStringでも同じ結果でした。 申し訳ございませんが、よろしくお願いします。

  • GridViewのDropDownLisについて

    よろしくお願いします ASP.NET(Microsoft Visual Basic 2010)で開発をしております。 GridViewにDropDownLisを配置しているのですが、 リストを選択したときの、GridViewの行(row)を取得する方法が分かりません。 OnSelectedIndexChangedを使用すると変更時のイベントを拾えて リストボックスの内容を取得出来るところまでは調べたのですが、 変更したリストボックスと同じ行にある別の項目の値を取得する 必要があるのですが、その方法が分かりません。 変更した行番号が分かれば「gridView.Rows(3).Cells(3).Text」で 値の取得は出来るのかな?と考えました。 なので、目的は同行の値の取得なので、もし行数が分からなくても 構いません。 自分なりには、かなり調べたつもりなのですが、どうしても答えを 導けず困っています。 お分かりの方がありましたら、是非ご教授頂ければ幸いです。 よろしくお願い致します。

  • 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のEditTemplate

    すみません。改めて質問させていただきます。 GridViewのEditTemplateにDropDownListが配置されています。 更新したときに、そのDropDownListの値を取得する方法をご教授頂きたいです。 言語はVBです。以下のコードを書きましたが取得できません(Updatingイベントのとき)↓ Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating MsgBox(GridView1.Rows(e.RowIndex).ToString) End Sub とりあえずメッセージボックスにドロップダウンリストの値を表示したいです。

  • gridviewでIMEを設定するには

    GridViewについて教えてください。 <環境>ASP.NET GridViewのItemTemplateにテキストボックスがあります。 そのテキストボックスのIME制御をしたいのですが記述方法がわかりません。 RowDataBoundイベントに記述するのでしょうか? gridviewでないと下記のようにすることで設定できるのですが、gridviewに苦戦しています。 ご教授お願いします。 txtName.Style.Add("ime-mode", "active")

  • ASP.Net GridView Select

    大変お世話になっております。 GridView のテンプレートにボタンを2つ配置しております。 A と B どちらのボタンのCommandName にも Select を記述して 選択された行のあるフィールドの値を取得したいのですが、 GridView1_SelectedIndexChanging で、e.NewSelectedIndex を使い該当セルを見つけることはできるのですが、AとBのボタンそれぞれで違うことをしたいのです。 イメージ的にいいますと     If CommnadButton.Name = "A" then         Aでやりたいこと     else If CommandButton.Name = "B" then         Bでやりたちこと     end if CommnadButton.Name なんてメソッドもプロパティも存在しないものですが、 SelectedIndexChanging イベントの中で どのボタンが押されてこのイベントが実行されるのかが、わかる方法がございましたら、ぜひご教授いただけますと大変助かる次第でございます。 何卒よろしくお願い申し上げます。

  • GridViewからテンプレートフィールドのEvalにおける、値の取得

    現在VisualStudio2005 ASP.NET VBで作成しております。 現在、GridViewを使用しておりまして、バウンドフィールド、ハイパーリンクフィールド、テンプレートフィールド、 をそれぞれ、配置しております。 <asp:ButtonField DataTextField="expression_no" HeaderText="No" SortExpression="expression_no" Text="ボタン" CommandName="Details" > <ItemStyle CssClass="GridBorder" /> </asp:ButtonField> <asp:BoundField DataField="item_name" HeaderText="商品名" SortExpression="item_name" > <ItemStyle CssClass="GridBorder" /> </asp:BoundField> <asp:TemplateField HeaderText="年額" SortExpression="moneyPerYear"> <ItemStyle HorizontalAlign="Right" CssClass="GridBorder" /> <ItemTemplate> <asp:Label ID="moneyPerYearGrid" runat="server" Text='<%# Eval("moneyPerYear", "{0:c0}") %>'></asp:Label> </ItemTemplate> <FooterTemplate> <asp:Label ID="lblSummary1" runat="server" ForeColor="Red"></asp:Label> </FooterTemplate> <FooterStyle HorizontalAlign="Right" /> </asp:TemplateField> ハイパーリンクフィールドがクリックされたタイミングで、そのクリックされた行の、データを取得したいと考えております。 Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) ' コマンド名が“Details”の場合にのみ処理 If e.CommandName = "Details" Then ' 主キー(isbn列)の値を取得 Dim isbn As String = GridView1.DataKeys(e.CommandArgument).Value.ToString Session("Gridrow") = GridView1.Rows(e.CommandArgument) Dim datarow As TableRow = Session("GridRow") Labaffiliation_name.Text = datarow.Cells(0).Text '証明No Labinsurance_item_name.Text = datarow.Cells(1).Text '商品名 LabPerYearContract.Text = datarow.Cells(2).Text '年金額 End If End Sub 下記のプログラムを実行すると、データが取得できるのはバウンドフィールドでGridViewにデータバインドしている Labinsurance_item_name.Text = datarow.Cells(1).Text '商品名 のみで、他のフィールドのデータが取得できません。 どなたかご教授いただけますと幸いです。

  • 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

  • Accessで非連結のテキストボックスに値を入力すると、全ての行に値が

    Accessで非連結のテキストボックスに値を入力すると、全ての行に値がセットされてしまいました。 →ハードコピーを添付します。 「部署」だけテーブルに連結した項目です。実際には値が表示されています。 (見られると困るので白く塗りつぶしました) 各行ごとに任意の値を入力したいのですが、どうすればそれが実現できるでしょうか? ※Access2000を使用しています。

  • GridViewでエラー

    現在、ACCESSデータベースに接続し一覧を表示するWebページを作成しています。開発ソフトはvisual studio 2005 proです。  webフォーム上のテキストボックスの値に応じてGridViewの内容にフィルタをかけているのですが、一覧に存在する値でフィルタをかけるときは表示されるのですが、一覧にない値でフィルタをかけた時、[指定された引数は、有効な値の範囲内にありません。 パラメータ名: index ] とエラーが表示されます。EmptyTemplateというところには[表示データがありません]と入力はしているのですが。。。通常表示データがない場合にはEmptyTemplateの値が表示されると思うのですが。。GridViewのプロパティの設定でしょうか?よろしくお願いします。

専門家に質問してみよう