- PR -

C#でコントロールのID名からコントロールを取得する方法

投稿者投稿内容
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-11-28 19:33
こんにちは。
ASP.NETのC#でTextBoxから値を取得しようとしています。
TextBoxのIDが動的に変わるのですが、値を取得する方法はありますか?
<asp:TextBox ID="aaa" runat="server"></asp:TextBox>
<asp:TextBox ID="bbb" runat="server"></asp:TextBox>
<asp:TextBox ID="ccc" runat="server"></asp:TextBox>
<asp:TextBox ID="ddd" runat="server"></asp:TextBox>
<asp:TextBox ID="eee" runat="server"></asp:TextBox>
のようになってまして、C#のソースの方では、
string textBoxID = "aaa"; <-これがaaaやbbb,ccc等に変わる
[textBoxID].Text;
のように、Textプロパティを取得しようとしています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-28 19:53
FindControl で検索してみましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-11-28 20:09
ありがとうございます。

実はFindControlは試してみたのですが、うまく行きませんでした。
以下のように実装しましたが、NullReferenceExceptionが発生します。
検索しても解決できず質問させていただきました。
具体的にどこが間違ってますでしょうか?

string textBoxName = ((TextBox)Page.FindControl("aaa")).Text;
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-11-28 20:26
自己レスです。
無理やりですが、
<asp:Panel ID="ppp" runat="server">
<asp:TextBox ID="aaa" runat="server"></asp:TextBox>
<asp:TextBox ID="bbb" runat="server"></asp:TextBox>
<asp:TextBox ID="ccc" runat="server"></asp:TextBox>
<asp:TextBox ID="ddd" runat="server"></asp:TextBox>
<asp:TextBox ID="eee" runat="server"></asp:TextBox>
</asp:Panel>
のようにして、
string textBoxText = ((TextBox)(ppp.FindControl("aaa"))).Text;
として回避しました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-28 20:41
引用:

kojiさんの書き込み (2006-11-28 20:26) より:

NullReferenceExceptionが発生します。


の根本的な原因は、検証がないからでしょう。
FindControl メソッドによって、コントロールが見つからない場合は null を返しますから、

コード:

    System.Web.UI.WebControls.TextBox oTextBox = this.FindControl("aaa") as System.Web.UI.WebControls.TextBox;

    if (oTextBox != null) {
        string textBoxText = oTextBox.Text;
    }


のようにすべきでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-11-28 20:54
引用:

string textBoxName = ((TextBox)Page.FindControl("aaa")).Text;


コードが少ないのでよくわかりませんが、Page に対してやってるからでしょう。
「何のインスタンス」に FindControl するのか考えなければなりません。
_________________
囚人のジレンマな日々
koji
常連さん
会議室デビュー日: 2005/07/14
投稿数: 28
投稿日時: 2006-11-28 21:00
ありがとうございます。
以下のように修整しました。

string textBoxText = "";
TextBox oTextBox = ppp.FindControl("aaa") as TextBox;
if (oTextBox != null){
textBoxText = oTextBox.Text;
}
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-11-28 23:47
細かいですけど、「aaa」テキストボックスがある事を確実に期待しているならば、
コード:
string textBoxText = ""; 
TextBox oTextBox = ppp.FindControl("aaa") as TextBox; 
if (oTextBox == null){ 
	throw new ApplicationException("アリエナーイ。バグじゃない?aaaテキストボックスがないよ!");
}
textBoxText = oTextBox.Text; 


の方がいいかな、と思います。
そうしないと「aaaテキストボックス」がない事にすぐ気付きませんからね。
_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)