好的我有一个GridView,如果文件存在,我想要一个链接,但我只想让它成为一个标签。现在我正在使用args中传递的Row更改RowDataBound事件处理程序上的控件。我不是很喜欢这个,因为我正在编写列ID,如果它发生了变化,我将需要记住更改此代码。我希望我可以在asp代码中做一个条件来添加一个链接,如果属性值不为null,否则添加一个标签。这可能吗?任何不同的解决方案?
我想要这样的事情:
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<%# if (Eval("LogFileName") == null)
<%#{
<asp:LinkButton ID="LogFileLink" runat="server" CommandArgument='<% #Eval("LogFileName") %>' CommandName="DownloadLogFile" Text='<%# Blah.NDQA.Core.Utilities.GetEnumerationDescription(typeof(Blah.NDQA.Core.BatchStatus), Eval("Status")) %>'>
<%# }
<%# else
<%#{
<asp:Label ID="LogFileLabel" runat="server"Text='<%# Blah.NDQA.Core.Utilities.GetEnumerationDescription(typeof(Blah.NDQA.Core.BatchStatus), Eval("Status")) %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
答案 0 :(得分:3)
您可以继续使用RowDataBound事件,但在您的aspx中添加:
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
在你的C#代码中:
if (LogFileName) {
LinkButton ctrl = new LinkButton();
ctrl.CommandArgument= ...;
ctrl.CommandName= ...;
} else {
Label ctrl = new Label();
ctrl.Text= ...;
}
// You have to find the PlaceHolder1
PlaceHolder1.Controls.Add(ctrl);
通过这种方式,您无需对列ID进行硬编码
答案 1 :(得分:3)
我知道现在这有点老了,但万一有人在找到类似问题的答案时偶然发现了这个问题,我发现你可以这样做:
<ItemTemplate>
<asp:ImageButton ID="btnDownload" runat="server"
CommandName="Download"
CommandArgument='<%# Eval("Document_ID") & "," & Eval("Document_Name") %>'
ImageUrl="download.png" ToolTip='<%#"Download " & Eval("Document_Name") %>'
Visible='<%# Not(Eval("Document_ID") = -1) %>' />
</ItemTemplate>
即。设置Visible属性以根据您的字段计算布尔表达式。如果要显示某些内容而不是下载链接或按钮(例如“不可用”标签),则只需将其Visible属性设置为与下载链接相反的布尔表达式。 (这是VB.NET而不是C#,但你明白了。)
答案 2 :(得分:2)
使用页面上的属性来确定是否要显示标签或链接
<asp:GridView ID="gv" runat="server">
<Columns>
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:LinkButton runat="server" Visible='<%# ShowLink %>' PostBackUrl="~/Aliases.aspx" >This is the link</asp:LinkButton>
<asp:Label runat="server" Visible='<%# ShowLabel %>'>Aliases label</asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
添加属性ShowLink和ShowLable玩具代码
public bool ShowLabel
{
get
{
//determine if the label should be shown
return false;
}
private set
{
//do nothing
}
}
public bool ShowLink
{
get
{
//determine if the link should be shown
return true;
}
private set
{
//do nothing
}
}
答案 3 :(得分:2)
如果你要做很多事情,我建议你自己写一个字段。最简单的方法可能是使NullableHyperlinkField继承自HyperlinkField,如果锚点的URL否则为null,则渲染出一个纯字符串。