c# - 如何将 BoundField 转换为 HyperLinkField?

标签 c# asp.net gridview hyperlink boundfield

我有一个绑定(bind)到数据集 (ds) 的 GridView (gv)。 Columns[1] 绑定(bind)到 ds 中名为 orderFilename 的字段; Columns[6] 是一个日期字段。

如果 Columns[6] 为空,我希望 Columns[1] 显示为文本;如果 Columns[6] 不为空,我希望 Columns[1] 显示为超链接,带有 url ~/directory/ + orderFilename.

我在网上找到了几个可能的解决方案,但似乎没有一个能满足我的要求。任何帮助将不胜感激。

最佳答案

我更喜欢远离 BoundFields,因为下一个人似乎总是需要将它们转换为模板字段以进行自定义。我会推荐以下内容:

为第 1 列使用带有 Literal 控件的模板字段:

<asp:TemplateField HeaderText="File">
    <ItemTemplate>
        <asp:Literal ID="ltFilename" runat="server" 
            OnDataBinding="ltFilename_DataBinding" />
   </ItemTemplate>
</asp:TemplateField>

然后为列控件实现OnDataBinding:

protected void ltFilename_DataBinding(object sender, System.EventArgs e)
{
    Literal lt = (Literal)(sender);
    if (Eval("yourColumn6Field") == DBNull.Value)
    {
        // just show a text filename
        lt.Text = Eval("orderFilename").ToString();
    }
    else
    {
        // produce the link
        lt.Text = string.Format("<a href='{0}'>{1}</a>",
             ResolveUrl("~/directory/" + Eval("orderFilename").ToString()),
             Eval("orderFilename").ToString());
    }
}

这样做的好处是您已将逻辑直接本地化到控件中。您可以轻松地将其换出并改变它,而不会意外影响网格的其他部分。

关于c# - 如何将 BoundField 转换为 HyperLinkField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124791/

相关文章:

c# - 通用处理程序不返回值

c# - 限制路由到 ASP.NET Core 中的 Controller 命名空间

wpf - 更改 GridView 列标题的字体大小

c# - DotLiquid/Liquid 获取字典

c# - 更新 ASP 页面中的进度条

c# - 如何在 ASP.NET 中动态更改按钮文本

C# 和 javascript 电子邮件验证正则表达式

c# - ASP.NET - GridView 问题

java - 如何在 gridView 上添加 OnTouchListener?

c# - 替换 Word 2003 文档中的 MergeFields 并保持样式