请参阅编辑。
我希望能够在使用用户控件的aspx中执行此操作。
<uc:MyControl ID="MyGrid" runat="server">
<asp:BoundField DataField="FirstColumn" HeaderText="FirstColumn" />
<asp:BoundField DataField="SecondColumn" HeaderText="SecondColumn" />
</uc>
我有这个代码(不起作用)。我有什么想法吗?
VB
Partial Public Class MyControl
Inherits UserControl
<System.Web.UI.IDReferenceProperty(GetType(DataControlFieldCollection))> _
Public Property Columns() As DataControlFieldCollection
Get
Return MyGridView.Columns
End Get
Set(ByVal value As DataControlFieldCollection)
' The Columns collection of the GridView is ReadOnly, so I rebuild it
MyGridView.Columns.Clear()
For Each c As DataControlField In value
MyGridView.Columns.Add(c)
Next
End Set
End Property
...
End Class
C#
public partial class MyControl : UserControl
{
[System.Web.UI.IDReferenceProperty(typeof(DataControlFieldCollection))]
public DataControlFieldCollection Columns {
get { return MyGridView.Columns; }
set {
MyGridView.Columns.Clear();
foreach (DataControlField c in value) {
MyGridView.Columns.Add(c);
}
}
}
...
}
编辑:
实际上它确实有效,但自动完成在uc:MyControl开始和结束标记之间不起作用,我收到编译器警告: -
元素'MyControl'的开始和结束标记之间不允许使用内容。
验证(XHTML 1.0 Transitional):不支持元素“列”。
元素'BoundField'不是已知元素。如果网站中存在编译错误,或者缺少web.config文件,则会发生这种情况。
所以我想我需要使用某种指令来告诉编译器期望标签之间的内容。
有什么想法吗?
答案 0 :(得分:3)
我找到了解决这个问题的方法
步骤1 - 将以下属性添加到UserControl
[ MergableProperty(false), DefaultValue((string)null),
Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
typeof(UITypeEditor)),
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual DataControlFieldCollection Columns
{
get
{
return GridView1.Columns;
}
}
Secand - 您可以在usercontrol标记内设置列集合,如
<uc1:TControl ID="TControl1" runat="server" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="UserID" />
<asp:BoundField DataField="Name" HeaderText="UserName" />
</Columns>
</uc1:TControl>
Visual Studio将为列属性启用自动完成功能,但设计器将抛出异常
最后,您可以在用户控件中绑定gridview