我创建了一个类来做一些像GridView继承自System.Web.UI.WebControls.WebControl的工作。
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代码,但为了方便deveop我已经创建了一些东西。
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'。请检查是否使用了量规或装配参考。这是用韩文写的,但我翻译成英文。 谁能给我一个解决这个问题的线索?
答案 0 :(得分:1)
在模板化控件中,模板在容器中实例化。要使数据绑定在模板化字段中工作,它建议容器应该实现IDataItemContainer接口 - 接口实现应该提供数据项。
AFAIK,为了支持数据绑定表达式,ASP.NET解析器为控件(其属性使用这些表达式)注入DataBinding
事件的处理程序,然后在处理程序中,它生成查找数据项的代码容器。
因此,在您的示例中,如果您希望在IHLabelField.Text
属性中使用数据绑定表达式,则控件的命名容器应该实现IDataItemContainer
或应该具有DataItem
属性。因此,在这种情况下,您可能需要在DataItem
控件上IHGridView
- 并且它不会按照您想要的方式运行。
答案 1 :(得分:0)
这是我们使用的一个例子。我希望它有所帮助
<asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'