質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • C#

    9035questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    625questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ListView内のtextboxコントロールの値取得・設定方法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,222

matsunomori

score 1

ListViewを使用してDBの値を表示・更新することはできたのですが
イメージ説明
jikan1とjikan2の値を入れたら、その数値の合計がjikan3に自動で入力されるようにしたいのですが、そのようなことは可能なのでしょうか?

<asp:TextBox ID="jikan2TextBox" runat="server" OnTextChanged="jikan2TextBox_TextChanged" AutoPostBack="true" Text='<%# Bind("jikan2") %>' />

のようにして、jikan2が変更されたらjikan2TextBox_TextChangedが呼ばれるところまで作れたのですが、jikan2TextBox_TextChanged内でjikan2TextBox.Textとしても値を取得することができずに困っています。

ListView内のコントロールから値を取得する方法、値を設定する方法をご存知の方は、教えていただけないでしょうか。
よろしくお願いします。

ちなみにわたしの環境は
windows7 Ultimate sp1 32bit
VS Cmmunity 2015
ASP.NET 4

ソースは以下の通りです。

・WebForm1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="test.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListView ID="ListView1" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSource1">
            <EditItemTemplate>
                <tr style="background-color: #999999;">
                    <td>
                        <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
                        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="キャンセル" />
                    </td>
                    <td>
                        <asp:Label ID="IdLabel1" runat="server" Text='<%# Eval("Id") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="jikan1TextBox" runat="server" Text='<%# Bind("jikan1") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="jikan2TextBox" runat="server" OnTextChanged="jikan2TextBox_TextChanged" AutoPostBack="true" Text='<%# Bind("jikan2") %>' />
                    </td>
                    <td>
                        <asp:TextBox ID="jikan3TextBox" runat="server" Text='<%# Bind("jikan3") %>' />
                    </td>
                </tr>
            </EditItemTemplate>
            <EmptyDataTemplate>
                <table runat="server" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;">
                    <tr>
                        <td>データは返されませんでした。</td>
                    </tr>
                </table>
            </EmptyDataTemplate>
            <ItemTemplate>
                <tr style="background-color: #E0FFFF;color: #333333;">
                    <td>
                        <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="編集" />
                    </td>
                    <td>
                        <asp:Label ID="IdLabel" runat="server" Text='<%# Eval("Id") %>' />
                    </td>
                    <td>
                        <asp:Label ID="jikan1Label" runat="server" Text='<%# Eval("jikan1") %>' />
                    </td>
                    <td>
                        <asp:Label ID="jikan2Label" runat="server" Text='<%# Eval("jikan2") %>' />
                    </td>
                    <td>
                        <asp:Label ID="jikan3Label" runat="server" Text='<%# Eval("jikan3") %>' />
                    </td>
                </tr>
            </ItemTemplate>
            <LayoutTemplate>
                <table runat="server">
                    <tr runat="server">
                        <td runat="server">
                            <table id="itemPlaceholderContainer" runat="server" border="1" style="background-color: #FFFFFF;border-collapse: collapse;border-color: #999999;border-style:none;border-width:1px;font-family: Verdana, Arial, Helvetica, sans-serif;">
                                <tr runat="server" style="background-color: #E0FFFF;color: #333333;">
                                    <th runat="server"></th>
                                    <th runat="server">Id</th>
                                    <th runat="server">jikan1</th>
                                    <th runat="server">jikan2</th>
                                    <th runat="server">jikan3</th>
                                </tr>
                                <tr id="itemPlaceholder" runat="server">
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr runat="server">
                        <td runat="server" style="text-align: center;background-color: #5D7B9D;font-family: Verdana, Arial, Helvetica, sans-serif;color: #FFFFFF"></td>
                    </tr>
                </table>
            </LayoutTemplate>
        </asp:ListView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Table]" UpdateCommand="UPDATE [Table] SET jikan1 = @jikan1, jikan2 = @jikan2, jikan3 = @jikan3 WHERE (Id = @Id)">
            <UpdateParameters>
                <asp:Parameter Name="jikan1" />
                <asp:Parameter Name="jikan2" />
                <asp:Parameter Name="jikan3" />
                <asp:Parameter Name="Id" />
            </UpdateParameters>
        </asp:SqlDataSource>
    </div>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </form>
</body>
</html>

・WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace test
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void jikan2TextBox_TextChanged(object sender, EventArgs e)
        {
            jikan3TextBox.Text = jikan1TextBox.Text + jikan2TextBox.Text; //ここでエラー
        }
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

EditItemTemplateの場合だと、以下のような感じでできると思います。

ただ、いまのソースだとポストバックのたびにデータが再度バインドされ
正しい計算ができように思いますので、Page_Loadイベントでポストバックの時は
何もしないような配慮が必要かもしれません。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

    }            
}

protected void jikan2TextBox_TextChanged(object sender, EventArgs e)
{

     TextBox jikan1 = ((TextBox)ListView1.EditItem.FindControl("jikan1TextBox"));
     TextBox jikan2 = ((TextBox)ListView1.EditItem.FindControl("jikan2TextBox"));
     TextBox jikan3 = ((TextBox)ListView1.EditItem.FindControl("jikan3TextBox"));

     jikan3.Text = (int.Parse(jikan1.Text) + int.Parse(jikan2.Text)).ToString();

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C#

    9035questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    625questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。