You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASPX.NET如何按条件手动添加Telerik Grid模板列?

失效原因说明

你原来的写法不生效是因为Telerik RadGrid的列定义属于服务器控件的初始化配置,会在页面解析阶段就生成对应控件对象,你在外层加的<% if %>属于页面运行时渲染阶段的逻辑,执行时机晚于列对象的创建,因此判断不会生效。


可行解决方案

方案1:控制列可见性(最简便,90%场景适用)

不需要在外层加if判断,直接把列的Visible属性绑定你的系统判断逻辑即可,不符合条件时Telerik不会将该列渲染到前端,性能影响可忽略:

<telerik:GridTemplateColumn 
    UniqueName="Image" 
    HeaderStyle-Width="170" 
    Reorderable="false"
    Visible='<%# Session[Global.SYSTEM_NAME].ToString().Contains("Coco Cola") %>'>
  <ItemTemplate>                        
    <center>
      <asp:Image ID="Image1" runat="server"
              Height="145" Width="160" AlternateText="Signature preview not available"
              src='<%# "Data:BASE64VALUE/png;base64," + Eval("BASE64VALUE") %>'/>
    </center>
  </ItemTemplate>
</telerik:GridTemplateColumn>

注意属性外层要使用单引号包裹,避免和内部字符串的双引号产生解析冲突。

方案2:后台动态生成列(完全不创建多余列对象)

如果要求不符合条件时完全不生成该列的控件对象,可以在Grid的初始化事件中动态添加列:

  1. 前台删除该模板列的硬编码
  2. 后台添加对应逻辑:
protected void RadGrid1_Init(object sender, EventArgs e)
{
    // 先判断当前系统
    if (Session[Global.SYSTEM_NAME]?.ToString().Contains("Coco Cola") == true)
    {
        GridTemplateColumn imageCol = new GridTemplateColumn();
        imageCol.UniqueName = "Image";
        imageCol.HeaderStyle.Width = Unit.Pixel(170);
        imageCol.Reorderable = false;
        imageCol.ItemTemplate = new ImageColumnTemplate();
        // 插入到列集合的指定位置
        RadGrid1.Columns.Add(imageCol);
    }
}

// 实现模板列的渲染逻辑
public class ImageColumnTemplate : ITemplate
{
    public void InstantiateIn(Control container)
    {
        HtmlGenericControl centerWrapper = new HtmlGenericControl("center");
        Image signImg = new Image();
        signImg.ID = "Image1";
        signImg.Height = Unit.Pixel(145);
        signImg.Width = Unit.Pixel(160);
        signImg.AlternateText = "Signature preview not available";
        // 绑定base64数据
        signImg.DataBinding += (s, arg) => {
            var img = s as Image;
            var dataItem = (img.NamingContainer as GridDataItem).DataItem;
            string base64Val = DataBinder.Eval(dataItem, "BASE64VALUE")?.ToString();
            img.Attributes["src"] = $"Data:BASE64VALUE/png;base64,{base64Val}";
        };
        centerWrapper.Controls.Add(signImg);
        container.Controls.Add(centerWrapper);
    }
}

内容的提问来源于stack exchange,提问作者vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:00:00