3

tr/td 内にいくつかのテキスト ボックスがあるフォームビューがあります。.FindControl メソッドを使用してテキスト ボックスを取得しようとしていますが、null が返されます。FormView は常に編集モードです (そのため、私は常に EditItemTemplate にいます)。前のページからのテキスト ボックスにクエリ文字列の値を読み込もうとしているので、page_load でこれを行う必要があります。私はこれを Gridviews で常に次のように行います。

txtFirstName = (TextBox)fvGeneralInfo.FindControl("txtFirstName");

またはこのように:

txtFirstName = (TextBox)fvGeneralInfo.FooterRow.FindControl("txtFirstName");

またはこのように:

txtFirstName = (TextBox)fvGeneralInfo.Rows.FindControl("txtFirstName");

何を与える?

<asp:FormView ID="fvGeneralInfo" runat="server" 
    DataSourceID="objInstructorDetails"
    OnItemCommand="fvGeneralInfo_ItemCommand"
    OnItemUpdated="fvGeneralInfo_ItemUpdated"  
    DefaultMode="Edit"
    DataKeyNames="InstructorID" >
    <EditItemTemplate>
        <table>
            <tr>
                <td colspan="2" class="Admin-SubHeading" style="padding-left:10px;">General Info:</td>
            </tr>
            <tr>
                <td class="Admin-FieldLabel">ID:</td>
                <td><asp:TextBox ID="txtInstructorId" runat="server" CssClass="Admin-Textbox" ReadOnly="true" Text='<%# Bind("InstructorID") %>' /></td>
            </tr>
            <tr>
                <td class="Admin-FieldLabel">First Name:</td>
                <td><asp:Textbox ID="txtFirstName" runat="server" CssClass="Admin-Textbox" Text='<%# Bind("FirstName") %>' /></td>
            </tr>
            </table>  
        </EditItemTemplate>
    </asp:FormView>
4

2 に答える 2

3

abatishchev の答えは正しいですが、このバリエーションの方が少しすっきりしていることがわかりました。DataBind() を明示的に呼び出す必要がなくなります。

<asp:FormView ID="fvMember" runat="server" DataSourceID="tblMembers" DefaultMode="Insert" OnDataBound="DataBound">...</asp:FormView>

protected void DataBound(object sender, EventArgs e)
{
    if (fvMember.CurrentMode == FormViewMode.Edit)
    {
        Label lblSubmit = fvMember.FindControl("lblSubmit") as Label;
        ...
    }
}
于 2011-11-24T16:31:25.150 に答える
2

最初に電話してくださいDataBind();。それでFindControl()

于 2010-01-31T11:04:31.910 に答える