我可以构建一个基本上像“MasterPage”一样的控件吗?
我的意思是,我在很多页面中都有这样的网格:
<asp:UpdatePanel ID="AnnouncementsPanel" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:GridView ID="AnnoucementsGrid" runat="server" AutoGenerateColumns="false" DataKeyNames="Id" >
<Columns>
<asp:BoundField DataField="Title" HeaderText="Title" />
<asp:BoundField DataField="Created" HeaderText="Date" />
<asp:BoundField DataField="Modified" HeaderText="Last Modified" />
<asp:ButtonField ButtonType="Button" Text="Process" CommandName="Process" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
我想构建一个控制代码隐藏的大多数的控件,但我需要在每种情况下以声明方式声明网格的列。
有没有办法创建这样的控件?
<uc:CrudGrid ID="AnnouncementsCrud" runat="server">
<Columns>
<asp:BoundField DataField="Title" HeaderText="Title" />
<asp:BoundField DataField="Created" HeaderText="Date" />
<asp:BoundField DataField="Modified" HeaderText="Last Modified" />
<asp:ButtonField ButtonType="Button" Text="Process" CommandName="Process" />
</Columns>
</uc:CrudGrid>
或事件更好:
<uc:CrudGrid ID="AnnouncementsCrud" runat="server">
<Columns>
<asp:BoundField DataField="Title" HeaderText="Title" />
<asp:BoundField DataField="Created" HeaderText="Date" />
<asp:BoundField DataField="Modified" HeaderText="Last Modified" />
</Columns>
</uc:CrudGrid>
可能必须将标签命名为“Fields”,但是能够删除按钮,因此可以在UC的代码隐藏中使用它?
对于那些对此有正面答案的人有很多的爱&lt; 3
答案 0 :(得分:1)
找到我想要的确切解决方案:
[DefaultValue((string)null)]
[Editor(typeof(System.Web.UI.Design.WebControls.DataControlFieldTypeEditor), typeof(UITypeEditor))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public DataControlFieldCollection Columns
{
get { return Grid.Columns; }
}
这样我就可以在我自己的用户控件中从网格中公开Columns,并从标记中编辑字段,保持我的UC中的一般功能
答案 1 :(得分:0)
取决于你希望它是多么积极:-)你总是可以建立自己的控制来做到这一点。这是一种选择。
另一种选择是创建一个附加到网格的辅助对象,并将每个网格分开。
第三个选项是使用公共代码创建用户控件,并通过用户控件可编程地将列添加到网格中。
HTH。