我更喜欢远离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());
}
}
这样做的好处是您已将逻辑直接本地化到控件。您可以轻松地将其换出并进行更改,而不会意外影响网格的其他部分。