ASP.NET GridView ItemTemplate

时间:2009-08-26 18:54:31

标签: asp.net gridview itemtemplate

好的我有一个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>

4 个答案:

答案 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,则渲染出一个纯字符串。