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

原文 标签 c# asp.net gridview hyperlink boundfield

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

如果Columns[6]为null,我希望Columns[1]以文本形式显示;如果Columns[6]不为null,我希望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# - 流大文件到Web服务

c# - 如何摆脱MasterDetailPage空空间Xamarin形式

c# - 如何在C#中以编程方式添加对目录的写访问权限?

android - 在GridView中加载多个大图像的最佳方法

c# - System.InvalidOperationException:ExecuteReader:CommandText属性尚未初始化

c# - jQuery tabcontrol:加载gridview

c# - 从Web应用程序(EF,ASP.NET Identity,Azure)中删除注册,并从数据库中注册用户

c# - 您如何简单地监视.TryEnter

c# - 在表格内将控件添加到innerhtml div

c# - WCF和<identity impersonate =“ true” />