C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: FooterTemplateのテキストBOXに値をセット


(過去ログ 133 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■78671 / inTopicNo.1)  FooterTemplateのテキストBOXに値をセット
  
□投稿者/ とし (1回)-(2016/02/05(Fri) 17:04:01)

分類:[.NET 全般] 

環境は以下の環境で行っています。
2003Server,IIS V6.0,Access2000,IE8
ASP.NET開発: Visual Web Developer2010

FooterTemplateに登録の機能を作成しました。

下記URL参照にて作成

https://blogonos.wordpress.com/2006/03/29/gridview%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/

登録用テキストBOXを5つ作り
1個目のテキストBOXにコードを入力して2個目のテキストBOXにモジュールで取得した名称をセットしたいのですがやり方が解らず
作業が止まっています。
宜しくお願い致します。

ちなみに
1個目のテキストBOXの値は下記内容で取得
Dim Kmk As String
Kmk = CType(GridView1.Controls(0).Controls(GridView1.Controls(0).Controls.Count - 1).FindControl("コード"), TextBox).Text
引用返信 編集キー/
■78672 / inTopicNo.2)  Re[1]: FooterTemplateのテキストBOXに値をセット
□投稿者/ WebSurfer (808回)-(2016/02/05(Fri) 17:38:22)
No78671 (とし さん) に返信

そもそも、GridView にはデータベースにレコードを追加する機能はありませんが、そこを
無理やりその機能を追加するという話ですね。

ASP.NET のバージョンは何ですか? 3.5 以降なら ListView を使うべきですけど。
引用返信 編集キー/
■78673 / inTopicNo.3)  Re[1]: FooterTemplateのテキストBOXに値をセット
□投稿者/ WebSurfer (809回)-(2016/02/05(Fri) 17:51:38)
No78671 (とし さん) に返信

↓ 意味が分からないところを聞くのを忘れてました。

> 1個目のテキストBOXにコードを入力して2個目のテキストBOXにモジュールで取得した
> 名称をセットしたいのですがやり方が解らず

このあたりを分かりやすく説明していただけませんか。特に「モジュールで取得した」というの
が何のことか自分には理解できないです。
引用返信 編集キー/
■78682 / inTopicNo.4)  Re[2]: FooterTemplateのテキストBOXに値をセット
□投稿者/ とし (2回)-(2016/02/09(Tue) 10:20:40)
No78673 (WebSurfer さん) に返信
> ■No78671 (とし さん) に返信
>
> ↓ 意味が分からないところを聞くのを忘れてました。
>
>>1個目のテキストBOXにコードを入力して2個目のテキストBOXにモジュールで取得した
>>名称をセットしたいのですがやり方が解らず
>
> このあたりを分かりやすく説明していただけませんか。特に「モジュールで取得した」というの
> が何のことか自分には理解できないです。

WebSurferさんいつも有難うございます。
昨日はわんくまが繋がらず遅くなりました。

ASP.NETバージョン:4.030319です。

App_Codeにコードをパラメータで渡してマスタのコードを検索してコード名称を返すモジュールを作成しています。

Insertコード_TextChangedイベントで

Kmk = CType(GridView1.Controls(0).Controls(GridView1.Controls(0).Controls.Count - 1).FindControl("Insertコード"), TextBox).Text

Dim Code As String = Kmk
Dim KoumokuObj As New KoumokuClass
Dim KoumokuName As String = KoumokuObj.GetKoumokuName(Labo, Code)
Session("KmkN") = KoumokuName

コード名称を取得したのでここで2個目のBOXに名称をセットしたいと思っています。


ListViewは使った事がないのですが・・・
ListViewで1個目のコードの取得方法と2個目に名称をセットする方法があればチャレンジしたいと思います。
宜しくお願い致します。
引用返信 編集キー/
■78683 / inTopicNo.5)  Re[3]: FooterTemplateのテキストBOXに値をセット
□投稿者/ PANG2 (102回)-(2016/02/09(Tue) 11:31:47)
No78682 (とし さん) に返信
> Insertコード_TextChangedイベントで

sender から手繰るのが分りやすいのでは?

Dim TxtCode As TextBox = CType(sender, TextBox)
Dim TxtMei As TextBox = CType(TxtCode.Parent.FindControl("名称"), TextBox)
引用返信 編集キー/
■78684 / inTopicNo.6)  Re[3]: FooterTemplateのテキストBOXに値をセット
□投稿者/ WebSurfer (810回)-(2016/02/09(Tue) 13:37:47)
No78682 (とし さん) に返信

> コード名称を取得したのでここで2個目のBOXに名称をセットしたいと思っています。

1個目のテキストボックス (サーバー側で言うと TextBox コントロール)の AutoPoskBack 
プロパティは True に設定されていてユーザー入力完了で自動的にポストバックがかかり、
Insertコード_TextChanged ハンドラに制御が飛ぶということで良いのですね。

で、問題は Insertコード_TextChanged ハンドラで2個目の TextBox オブジェクトへの参照
が取得できないということですよね?

であれば、参考にされている記事の「◆◆◆ 追記 その2 ◆◆◆」に書いてある再帰を使っ
て2個目の TextBox オブジェクトへの参照を取得できると思います。

また、1個目の TextBox.Text プロパティの値は Insertコード_TextChanged ハンドラの引数 
sender(即ち1個目の TextBox)から取得するのが良いと思います。

以下のような感じです。(コードは C# ですが、分かりますよね?)

protected void Insertコード_TextChanged(object sender, EventArgs e)
{
    // TextBox2 は2個目の TextBox の ID
    Control ctrl = FindControlRecursive(GridView1, "TextBox2");
    if (ctrl is TextBox)
    {
        string Code = ((TextBox)sender).Text;
        KoumokuClass KoumokuObj = new KoumokuClass();
        string KoumokuName = KoumokuObj.GetKoumokuName(Labo, Code);
        ((TextBox)ctrl).Text = KoumokuName;
    }
}

protected Control FindControlRecursive(Control Root, string Id)
{
    if (Root.ID == Id)
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, Id);
        if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
} 


> ListViewで1個目のコードの取得方法と2個目に名称をセットする方法があればチャレンジ
> したいと思います。

ListView を使えば、SqlDataSource の InsertParameters(InsertCommand プロパティで使用
されるパラメータを格納するパラメータ コレクション)の内容を、ユーザー入力の TextBox 
をバインド先に設定した ControlParameter に書き換えるというようなウラワザ的なことはし
なくて済むという大きなメリットがあります。

ただし、それと今回の話(1個目の TextBox のユーザー入力をベースにサーバー側で2個目の 
TextBox への入力を取得して設定する)は別の問題で、今回の話を実現するには ListView を
使っても上記と同様なことが必要になります。

引用返信 編集キー/
■78685 / inTopicNo.7)  Re[4]: FooterTemplateのテキストBOXに値をセット
□投稿者/ とし (3回)-(2016/02/09(Tue) 14:09:25)
No78683 (PANG2 さん) に返信
> ■No78682 (とし さん) に返信
>>Insertコード_TextChangedイベントで
>
> sender から手繰るのが分りやすいのでは?
>
> Dim TxtCode As TextBox = CType(sender, TextBox)
> Dim TxtMei As TextBox = CType(TxtCode.Parent.FindControl("名称"), TextBox)

WebSurferさん PANG2さん有難うございます。
下記、内容にてコードを入力し名称にカーソルが移った時点で名称が入りました。

Dim TxtCode As TextBox = CType(sender, TextBox)
Dim TxtMei As TextBox = CType(TxtCode.Parent.FindControl("Insert項目名"), TextBox)
TxtMei.Text = KoumokuName

大変助かりました
有難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -