asp.net – 动态更改GridView项目模板
|
我有一个相当大的asp.net网站,使用GridView绑定到很多地方的同一个对象.我正在使用项目模板来自定义每一行.但是,要在我必须复制的所有页面中使用相同的模板.将项目模板粘贴到每个页面.显然这不是最好的解决方案.除此之外,我希望能够通过更改某些配置文件来更改GridView使用的模板.
解决方法为了实现你想要的,你有两个选择:1.)在代码中动态构建每个TemplateField,并根据某些配置切换它们. 我知道你说你不想使用UserControl,因为这会剥夺你动态改变你的布局的能力,但让我用一个例子来挑战这个预设. 您可以使用内置的ASP.Net功能,以便使用PlaceHolder Control动态切换出您喜欢的用户控件. <asp:PlaceHolder ID="GridViewPlaceHolder" runat="server" /> 您的自定义网格可以在.ascx文件中以声明方式构建,然后在运行时动态加载到位:如下所示: GridViewPlaceHolder.Controls.Add(LoadControl("~/Controls/MyCustomControl.ascx"));
现在,如果您真的想让自己的生活更轻松,那么您可以创建一个所有自定义网格控件都将继承的抽象基类.通过这种方式,您可以在加载时一般地处理控件. public abstract class CustomGridControl: System.Web.UI.UserControl
{
public abstract Object DataSource { get; set; }
}
可以在标记中定义简单网格: <asp:GridView ID="myGridView" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label Text='<%#Eval("Name") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Age">
<ItemTemplate>
<asp:Label Text='<%#Eval("Age") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
你的控件背后的代码看起来像这样: public partial class SimpleGrid : CustomGridControl
{
public override object DataSource
{
get { return myGridView.DataSource; }
set { myGridView.DataSource = value; }
}
}
现在使用它的页面或控件只需要转换为基类,你可以一般地使用它.以下是一个如何使用它的简单示例,但我认为它清楚地说明了这一点: protected void Page_Load(object sender,EventArgs e)
{
var dataSource = new List<MyCustomClass>
{
new MyCustomClass{Name = "Josh",Age = 43},new MyCustomClass{Name = "Bob",Age = 14},new MyCustomClass{Name = "Ashley",Age = 32},};
DynamicallyLoadUserControlGrid("~/GridViewTemplates/SimpleGrid.ascx",dataSource);
}
private void DynamicallyLoadUserControlGrid(String controlLocation,List<MyCustomClass> dataSource)
{
var ctrl = (CustomGridControl)LoadControl(controlLocation);
ctrl.DataSource = dataSource;
ctrl.DataBind();
GridViewPlaceHolder.Controls.Add(ctrl);
}
所以你有它.自定义模板化控件没有尝试在代码中手动构建它们的所有令人讨厌的头痛.我将在另一个答案中发布完全手动的方式,但是一旦你看到它,我想你会同意这种方法是首选. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC4:禁用某些控制器上的移动视图
- asp.net-mvc – 使用邮政MVC与布局解析标题作为邮件正文
- asp.net – 比较Razor vs ASPX语法
- Page_Load在ASP.NET页面中触发两次
- asp.net-mvc – 无法让defaultRedirect工作
- asp.net – .NET Web API HttpResponseMessage模式?
- 在ASP.Net应用程序中执行Server.MapPath的最有效的方法是什
- asp.net – Visual Studio 2017错误:无法启动程序,在当前状
- ASP.NET剃刀参考文档
- 如何配置IIS 7以使用子目录作为默认文档?
- asp.net – 信用卡的前四个号码多久更改一次?
- asp.net – Apache webserver上的vNext
- asp.net-mvc – mvc3 maxLength输入
- asp.net-core-mvc – global.json和src文件夹有多
- asp.net – AspNetSession布局渲染器不工作
- asp.net – 访问视图Mvc.net中的路由值
- asp.net – 使用HTML标记到web.config文件
- .Net Web开发技术栈
- 如何检查ASP.Net中客户端(JavaScript)的Page.Val
- ASP.NET web.config中数据库连接字符串connectio
