0

System.Web.UI.WebControls.WebControl から継承する GridView のようないくつかのジョブを実行するクラスを作成しました。

public class IHGridView : System.Web.UI.WebControls.WebControl
{
    // inside here, actually return Repeater class.


    protected override void OnInit(EventArgs e)
    {
        _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns);
        this.Controls.Add(_repeater);
    }
}

IHGridView でリピーター用の ItemTemplate も作成しました。

public class IHGridItemTemplate : ITemplate
{
}

IHGridView クラスは Repeater といくつかの html コードを返しますが、開発の便宜上、いくつかのものを作成しました。

public class Columns : StateManagedCollection
{
}

public class IHBoundFieldBase : IStateManager
{
}

public class IHLabelField : IHBoundFieldBase
{
}

私のaspxでは、これを以下のように使用できます。

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View">
    <Columns>
         <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" />
    </Columns>
</cc1:IHGridView>

今、私は問題を思いつきます。aspx で DataBinder.Eval を使用できません。

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' />

これは私にエラーを与えます。エラー メッセージは次のとおりです。 CS1061: 'System.Web.UI.Control' に 'DataItem' の定義がありません。「System.Web.UI.Control」の最初の引数に拡張可能なメソッド「DataItem」がありません。ルーブリックまたはアセンブリ参照を使用しているかどうかを確認してください。これは韓国語で書かれていましたが、私は英語に翻訳しました。誰でもこの問題を解決する手がかりを教えてもらえますか?

4

2 に答える 2

1

テンプレート化されたコントロールでは、テンプレートはコンテナでインスタンス化されます。テンプレートフィールドでデータバインディングを機能させるには、コンテナにIDataItemContainerインターフェイスを実装することをお勧めします。インターフェイスの実装でデータアイテムを提供する必要があります。

AFAIKは、データバインディング式をサポートするために、ASP.NETパーサーDataBindingがコントロール(プロパティがこれらの式を使用する)のイベントのハンドラーを挿入し、ハンドラーで、コンテナー内のデータ項目を検索するコードを生成します。

したがって、この例では、プロパティでデータバインディング式を使用する場合IHLabelField.Textは、コントロールのネーミングコンテナが実装するIDataItemContainerか、プロパティを持つ必要がありDataItemます。したがって、この場合、おそらく制御が必要DataItemになりますIHGridView-そしてそれはあなたが望むようには機能しません。

于 2011-11-04T09:16:40.100 に答える