none
detailsviewのフィールドの内容をTextboxに反映させる RRS feed

  • 質問

  • いつもいつも大変お世話になっております。

    VBでWebアプリを作成しています。

    detailsviewの下にテキストボックスを配置しています。
    ボタンをクリックすると、テキストボックスに
    detailsviewの特定のフィールドの内容(add1)
    が表示されるようにしたいです。

    【detailsview】ID,zipcode,add1,add2,name の5つのフィールドがある表

        <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
            DataKeyNames="ID" DataSourceID="SqlDataSource1" Height="50px" Width="125px">
            <Fields>
                <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
                    ReadOnly="True" SortExpression="ID" />
                <asp:BoundField DataField="zipcode" HeaderText="zipcode"
                    SortExpression="zipcode" />
                <asp:BoundField DataField="add1" HeaderText="add1" SortExpression="add1" />
                <asp:BoundField DataField="add2" HeaderText="add2" SortExpression="add2" />
                <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
            </Fields>
        </asp:DetailsView>

    【textboxとbutton】

        <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="ボタン" />


    http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/50a3ae7d-7dc3-410d-aff4-e139ff0bcf29/
    上記ページを参考にしてコードを作成してみたのですが
    うまく動作しません。

        Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
            TextBox1.Text = DetailsView1.Rows(2).Cells(1).Text
        End Sub

    どのように修正したらいいのでしょうか?
    ご教授お願いいたします!

    2012年7月11日 2:25

回答

  • > ボタンをクリックしても何も起こりません。

    さて、この状態で何を調べました?

    ざっと考えると

    1.ボタンをクリックして、サーバーへのリクエストの送信は行われているか
    2.リクエストがあがってきているなら、Button1_Clickは呼び出されているか
    3.呼び出されているなら、DetailsView1.Rows(2).Cells(1) はどのようなオブジェクトか
     また、このオブジェクトにTextプロパティが存在していて、データを取得できるのか

    このような点を調査する必要があります。

    一番可能性の高いのは DetailsView1.Rows(2).Cells(1) がデータの値を表示しているものではないオブジェクトになっていることじゃないかと思います。
    DetailsViewが生成するオブジェクトツリーに合わせて指定しないといけないとこですし。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 1:31
  • 特にコードに問題があるように見えません。Button1_Clickイベントプロシージャ内にブレークポイントを設定してデバッグ実行すると、そこで止まりますか? もしくは、
    ' TextBox1.Text = DetailsView1.Rows(2).Cells(1).Text
     TextBox1.Text = "Clicked"
    のようにすると、TextBox1にClickedという文字が表示されますか?

    以上のように、どこで問題が発生しているのか、できるだけ絞り込んでみましょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 1:38
    モデレータ
  • デバッガは使ってみましたか?

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 13:26
  • ボタンクリックイベントのコードは
    Default2.aspx.vb
    に記載していたんですが、
    コードを別ページに書くのがだめなのかもしれないと思い、
    Default2.aspxの上部に以下のようにコードを記載してみたところ
    うまくできました。

    <%@ Page Language="VB" %>

    Webアプリケーションをコードビハインドで動作させるためには、例えば以下のように書く必要があります。

    <%@ Page Language="vb"  AutoEventWireup="false" CodeBehind="Default2.aspx.vb" Inherits="何とか名前空間名.Default2" %>


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2012年8月1日 1:11
    2012年7月18日 2:35
    モデレータ

すべての返信

  • うまく動作しません、とのことですが、「どのように」うまく動作していないのでしょう?
    なにができないのかがわからないと、アドバイスのしようもないかと思います。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    2012年7月11日 5:00
  • 小野さんも書かれていますが・・・

    > うまく動作しません。

    それは具体的にどういう状況なのか書いてください。うまく動
    作しないといっても、いろいろあるはずです(表示が期待と違
    う、例外がスローされる、無反応等々)。エラーメッセージが
    出ているなら、それは重要な情報ですので、省略しないで書い
    てください。

    どういう情報を提供すれば、回答者が状況を理解できて、的確
    な回答を迅速に得られるか、よく考えてください。例えば、
    masunona さんが PC 初心者から「PC がうまく動作しません。
    どうしたらいいでしょう?」と聞かれて、答えられますか?

    それから、デバッガは使えますか? 使えないと開発はできな
    いので、使い方をググって調べるなどして勉強し、使えるよう
    にしてください。今回の問題も、デバッガが使えれば、自己解
    決できると思います。

    2012年7月11日 12:57

  • >小野@どっとねっとふぁん さま
    >SurferOnWww さま

    いつもありがとうございます!
    要領を得なくてすみません。

    うまく動作しません。

    ボタンをクリックしても何も起こりません。
    です!
    よろしくお願いいたします!
    2012年7月13日 0:25
  • > ボタンをクリックしても何も起こりません。

    さて、この状態で何を調べました?

    ざっと考えると

    1.ボタンをクリックして、サーバーへのリクエストの送信は行われているか
    2.リクエストがあがってきているなら、Button1_Clickは呼び出されているか
    3.呼び出されているなら、DetailsView1.Rows(2).Cells(1) はどのようなオブジェクトか
     また、このオブジェクトにTextプロパティが存在していて、データを取得できるのか

    このような点を調査する必要があります。

    一番可能性の高いのは DetailsView1.Rows(2).Cells(1) がデータの値を表示しているものではないオブジェクトになっていることじゃないかと思います。
    DetailsViewが生成するオブジェクトツリーに合わせて指定しないといけないとこですし。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 1:31
  • 特にコードに問題があるように見えません。Button1_Clickイベントプロシージャ内にブレークポイントを設定してデバッグ実行すると、そこで止まりますか? もしくは、
    ' TextBox1.Text = DetailsView1.Rows(2).Cells(1).Text
     TextBox1.Text = "Clicked"
    のようにすると、TextBox1にClickedという文字が表示されますか?

    以上のように、どこで問題が発生しているのか、できるだけ絞り込んでみましょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 1:38
    モデレータ
  • デバッガは使ってみましたか?

    • 回答としてマーク masunona 2012年7月17日 6:22
    2012年7月13日 13:26
  • >みなさま

    たくさんのお返事いただきありがとうございました!

    コードは問題ないようだという助言と、
    trapemiyaさんに教えていただいたように
    TextBox1.Text = DetailsView1.Rows(2).Cells(1).Text

    TextBox1.Text = "Clicked"
    と書き直してみたところ、それでも動作しなかったので
    これはコード以前の問題だと思い、
    色々試した結果、なんとかうまく動作するようになりました。

    (以下うまく書ける自信がないですが
    考えたこととやってみたことを書いてみます。)
    そもそもこのページは、
    Default.aspx内にあるGridView内のひとつのレコードを選択し、
    選択したレコードを別ページ(Default2.aspx)に配置したdetailsviewに表示させて
    (http://localhost:XXX/Default2.aspx?ID=△△)
    さらにそのdetailsview内の特定のフィールドを
    textboxに表示させたいというものでした。

    ボタンクリックイベントのコードは
    Default2.aspx.vb
    に記載していたんですが、
    コードを別ページに書くのがだめなのかもしれないと思い、
    Default2.aspxの上部に以下のようにコードを記載してみたところ
    うまくできました。

    <%@ Page Language="VB" %>
    <script runat="server">
        Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
            TextBox1.Text = DetailsView1.Rows(2).Cells(1).Text
        End Sub
    </script>

    <body>




    ボタンクリックイベントを別ファイルに記載していたことが
    本当の原因かどうかは分からないのですが、
    とりあえず今の方法でうまく動いたので、
    これで進めていきたいと思っています。

    毎度の事ながら要領を得ない質問のしかたでご迷惑おかけしました。
    また質問することがあるかと思いますが
    よろしくお願いいたします!
    2012年7月17日 6:22
  • ボタンクリックイベントのコードは
    Default2.aspx.vb
    に記載していたんですが、
    コードを別ページに書くのがだめなのかもしれないと思い、
    Default2.aspxの上部に以下のようにコードを記載してみたところ
    うまくできました。

    <%@ Page Language="VB" %>

    Webアプリケーションをコードビハインドで動作させるためには、例えば以下のように書く必要があります。

    <%@ Page Language="vb"  AutoEventWireup="false" CodeBehind="Default2.aspx.vb" Inherits="何とか名前空間名.Default2" %>


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク masunona 2012年8月1日 1:11
    2012年7月18日 2:35
    モデレータ
  • trapemiya さま

    ご回答いただきありがとうございます!
    回答を拝見してすぐに自分のコードを書き直したにもかかわらず
    お礼を書くのを忘れていました。。。
    大変失礼しました。

    おかげさまで正常に動作しています!
    ありがとうございました!

    2012年8月1日 1:11