e.Item.FindControlは、オブジェクトのインスタンスに設定されていないオブジェクト参照をスローします

StackOverflow https://stackoverflow.com/questions/1022926

質問

ここに、例外をスローするRepeaterコードの一部があります..." Computer.Administrators" StringCollectionオブジェクトです。デバッガーは" AdminsEnumerator.Current"を表示します正しい文字列値を取得しますが、" txtAdministrators.Text"値を設定しようとします-例外がスローされます。アイデアを手伝ってください。

<asp:Repeater ID="repeatAdministrators" OnItemDataBound="repeatAdministrators_ItemDataBound" runat="server">
    <HeaderTemplate>
        <tr>
            <td class="formLabel">
                Administrators:
            </td>
            <td class="formInputText">
    </HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="txtAdministrators" runat="server" MaxLength="50" Enabled="False"></asp:TextBox><br />
    </ItemTemplate>
    <FooterTemplate>
        </td> </tr>
        <tr>
    </FooterTemplate>
</asp:Repeater>

これがコードビハインドです。

 protected void btnPing_Click(object sender, EventArgs e)
    {
        //...

        repeatAdministrators.DataSource = Computer.Administrators;
        repeatAdministrators.DataBind();
    }

    protected void repeatAdministrators_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        TextBox txtAdministrators = e.Item.FindControl("txtAdministrators") as TextBox;
        StringEnumerator AdminsEnumerator = Computer.Administrators.GetEnumerator();

        while (AdminsEnumerator.MoveNext())
        {
            txtAdministrators.Text = AdminsEnumerator.Current;
        }
    }
役に立ちましたか?

解決

ヘッダー項目にいないことを確認する必要があります:

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
}

(申し訳ありませんが、これはメモリからのものですが、ItemDataBoundメソッドに入れてください)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top