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

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

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

Re[7]: FindControlがうまくいかない


(過去ログ 76 を表示中)

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

■44878 / inTopicNo.1)  FindControlがうまくいかない
  
□投稿者/ ちゃー (1回)-(2009/12/22(Tue) 16:35:29)

分類:[.NET 全般] 

FormViewにある、コントロールを取得したい。
本来はPanelのデータにより表示・非表示をしたいのですが
Controlの取得ができません。
以下の最小パターンでも同じです。

何が原因なのでしょうか?

よろしくお願いします。

<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:FormView ID="formview1" runat="server">
<ItemTemplate>
<asp:TextBox ID="text1" runat="server">
</asp:TextBox>
</ItemTemplate>
</asp:FormView>

</div>
</form>
</body>
</html>

protected void Page_Load(object sender, EventArgs e)
{
FormView f1 = (FormView)this.FindControl("formview1");
TextBox t1 = (TextBox)formview1.FindControl("text1");

}

引用返信 編集キー/
■44880 / inTopicNo.2)  Re[1]: FindControlがうまくいかない
□投稿者/ επιστημη (2335回)-(2009/12/22(Tue) 16:56:52)
επιστημη さんの Web サイト
> Controlの取得ができません。

取得できていないのは FormViewですか? TextBoxですか?

引用返信 編集キー/
■44883 / inTopicNo.3)  Re[2]: FindControlがうまくいかない
□投稿者/ ちゃー (2回)-(2009/12/22(Tue) 17:15:02)
No44880 (επιστημη さん) に返信
>>Controlの取得ができません。
>
> 取得できていないのは FormViewですか? TextBoxですか?
>

お返事ありがとうございます。

どっちも出来ないんですよ。

引用返信 編集キー/
■44915 / inTopicNo.4)  Re[3]: FindControlがうまくいかない
□投稿者/ もりお (142回)-(2009/12/22(Tue) 21:54:42)
No44883 (ちゃー さん) に返信
> どっちも出来ないんですよ。
ではまず formview1 を取得するということに目的を絞って、取得できないか
もう一度確認してみてはいかがでしょうか。
こんな感じで、ログを出力してみるとわかりやすいかと思います。

FormView formview1 = FindControl("formview1") as FormView;
if (formview1 == null)
{
    System.Diagnostics.Debug.WriteLine("formview1 が見つかりませんでした");
    return;
}
else
{
    System.Diagnostics.Debug.WriteLine("formview1 が見つかりました");
}

formview1 は取得できるが text1 が取得できないということでしたらデータ
がないので ItemTemplate が利用されず TextBox コントロールが生成されな
いという可能性があります。
もしそうであれば、こんな感じで適当なデータをセットすることで回避出来る
かと思います。

FormView f1 = FindControl("formview1") as FormView;
f1.DataSource = new System.Collections.Generic.List<string>() { "もりお" };
f1.DataBind();
TextBox t1 = f1.FindControl("text1") as TextBox;

引用返信 編集キー/
■44921 / inTopicNo.5)  Re[4]: FindControlがうまくいかない
□投稿者/ Jitta on the way (494回)-(2009/12/23(Wed) 07:56:28)
FindControl って、子へ辿って行くんだっけ?
引用返信 編集キー/
■44929 / inTopicNo.6)  Re[5]: FindControlがうまくいかない
□投稿者/ もりお (143回)-(2009/12/23(Wed) 12:12:01)
No44921 (Jitta on the way さん) に返信
> FindControl って、子へ辿って行くんだっけ?
System.Web.UI.WebControls.FormView(FormView1)
    System.Web.UI.WebControls.ChildTable
        System.Web.UI.WebControls.FormViewRow
            System.Web.UI.WebControls.TableCell
        System.Web.UI.WebControls.FormViewRow
            System.Web.UI.WebControls.TableCell
                System.Web.UI.LiteralControl
                System.Web.UI.WebControls.TextBox(TextBox1)
                System.Web.UI.LiteralControl
        System.Web.UI.WebControls.FormViewRow
            System.Web.UI.WebControls.TableCell
こんな階層構造の場合に
FormView1.FindControl("TextBox1")
で TextBox1 を取得できましたので、おそらくは同じ INamingContainer 内で
あれば階層に関係なく検索されるのではないかと思います。

引用返信 編集キー/
■44948 / inTopicNo.7)  Re[6]: FindControlがうまくいかない
□投稿者/ Jitta on the way (496回)-(2009/12/24(Thu) 06:53:15)
No44929 (もりお さん) に返信
> ■No44921 (Jitta on the way さん) に返信
>>FindControl って、子へ辿って行くんだっけ?
> おそらくは同じ INamingContainer 内で
> あれば階層に関係なく検索されるのではないかと思います。

なるほど。検証ありがとうございます。
Windows Form とは違うのね。
引用返信 編集キー/
■45042 / inTopicNo.8)  Re[7]: FindControlがうまくいかない
□投稿者/ ちゃー (3回)-(2009/12/26(Sat) 08:35:41)
> FormView f1 = FindControl("formview1") as FormView;
> f1.DataSource = new System.Collections.Generic.List<string>() { "もりお" };
> f1.DataBind();
> TextBox t1 = f1.FindControl("text1") as TextBox;

これをすると、うまく行きました。
FormViewの中の項目はBindしないと、扱えないんですね。

しかし、Evalとかでカラムを指定している場合はそこで
エラーになるので、件数ゼロのSQLを無駄でもBindする必要があるのかな。

皆様、ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -