1

TextBox を含む InsertItemTemplate を操作できるように、フィールドの 1 つが TemplateField に変換された DetailsView があります (参照: 以下のコード)。問題は、コードビハインドでその TextBox プロパティにアクセスできないことです...そして、私は本当にそれを取得しません:(これが私のaspxコード(その一部)です:

<asp:DetailsView ID="_DetailsView" ClientIDMode="Static" runat="server" Height="50px"
        Width="125px" AllowPaging="True" AutoGenerateRows="False" DataKeyNames="IDUniv"
        DataSourceID="EntityDS" OnModeChanging="_OnModeChanging">
        <Fields>
            <asp:TemplateField HeaderText="DateUpdateUniv" SortExpression="DateUpdateUniv" ConvertEmptyStringToNull="False">
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBoxInsertItem" runat="server" Text='<%# Bind("DateUpdateUniv") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
        </Fields>
    </asp:DetailsView>
    <asp:EntityDataSource ID="EntityDS">

Page_LoadComplete イベント Handler には、次のようなものがあります。

private void Page_LoadComplete(object sender, EventArgs e)
    {
        if (_DetailsView.HasControls())
        {
            Control _InsertDate = _DetailsView.FindControl("TextBoxInsertItem") as TextBox;
            if (_InsertDate != null)
            {
                _InsertDate.Text  = "something";
            }
        }
    }

しかし、次のコードは間違っています: _DetailsView.FindControl("TextBoxInsertItem") また、これは機能しません: _InsertDate.Text = "something";

興味深い記事を見つけましたが、それでも...: http://www.devproconnections.com/article/aspnet2/getting-under-the-detailsview-control

誰かが私の道を見つけるのを手伝ってくれますか? この TextBoxInsertItem コントロールを見つけて操作する方法は? ありがとう

4

2 に答える 2

3
 TextBox txtB = _DetailsView.FindControl("TextBoxInsertItem") as TextBox;
 string text = txtB.Text;

そうやってみる?Control の代わりに TextBox を宣言することを除けば、違いはわかりません。子コントロールからデータを取得するこの特定の方法を何度も使用しましたが、常にうまくいきました。

于 2012-06-11T19:19:38.320 に答える
2

私はついに解決策を見つけました:)そして多くの問題がありました:

1.コードが適切な Page_event に配置されていませんでした。「FindControl それら」を試行する前に、DetailsView にコントロールが適切にレンダリングされている必要があると考えたため、Page_LoadComplete に配置しましたが、間違っていました
DetailsView にはいくつかのイベントがありますが、興味深いのはOnItemCreated (System.Web.UI.WebControls.DetailsView コントロールでレコードが作成されたときに発生します) です。

2.私のテストは関連性がありませんでした。単純にチェックする正しいテスト:

if (_DetailsView.FindControl("TextBoxInsertItem") != null)

3. 私の Visual Sudio (SP1 ではない) はバグでいっぱいでした (同じコードを実行していると、VS2010 を閉じて再度開くまで、エラーがスローされることもあれば、スローされないこともありました...

4.ジェーンが言ったように、「コントロール」ではなく「テキストボックス」を初期化する必要がありました

これらの数行が役立つことを願っています:)そしてMSDNで述べられているように:ページイベント処理の詳細な知識がない限り、特定の順序で発生する変更イベントに依存するアプリケーションロジックを作成しないでください

于 2012-06-12T05:27:48.513 に答える