0

我有以下 GridView:

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="SysInvoiceID" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="InvoiceID" HeaderText="SysInvoiceID" ReadOnly="True" SortExpression="SysInvoiceID" />
                <asp:BoundField DataField="BillMonth" HeaderText="BillMonth" SortExpression="BillMonth" />
                <asp:BoundField DataField="InvoiceDate" HeaderText="InvoiceDate" ReadOnly="True" SortExpression="InvoiceDate" />
                <asp:BoundField DataField="InvoiceNumber" HeaderText="InvoiceNumber" SortExpression="InvoiceNumber" />
                <asp:BoundField DataField="Net" HeaderText="Net" SortExpression="Net" />
                <asp:BoundField DataField="VAT" HeaderText="VAT" SortExpression="VAT" />
                <asp:BoundField DataField="Gross" HeaderText="Gross" SortExpression="Gross" />
                <asp:ButtonField CommandName="ViewInvoice"  HeaderText=" " ShowHeader="True" Text="View" />
            </Columns>
        </asp:GridView>

最后一列(ButtonField)是我自己创建的,只是为了在每一行上包含文本“查看”,单击时会显示 PDF 发票。

我不确定这是否可能,但我想知道是否可以为该列或其他内容添加某种验证,以便如果“InvoiceID”列为空,则相应的“查看”链接行不会出现。

通过在 Visual Studio 中进行拆分视图,然后在 GridView 任务上单击“编辑列”按钮,我感觉接近做到这一点,但就像我说的那样,我不确定是否可以这样做,可能不得不简单地诉诸编码它。

谢谢你的帮助!

4

2 回答 2

3

使用 a<TemplateField>而不是 a<ButtonField>

 <asp:TemplateField>
     <ItemTemplate>
         <asp:Button runat="server" Text="View" 
         Visible='<%# Eval("IsEmpty(InvoiceID)") %>' CommandName="ViewInvoice" />
     </ItemTemplate>
 </asp:TemplateField>

并向您的页面添加一个方法,该方法是IsEmpty(string id)您的 id 或任何类型的方法,然后首先检查它是否为空。

您还可以CommandArgument向 Button 添加一个属性,让您指定它的参数是什么。

于 2013-11-01T14:51:00.760 回答
0

使用占位符...

<asp:Placeholder runat="server" ID="plView" Visible="<%# Convert.ToBoolean(InvoiceID == null) ? false : true %>">
    <asp:ButtonField CommandName="ViewInvoice"  HeaderText=" " ShowHeader="True" Text="View" />
</asp:Placeholder>
于 2013-11-01T14:53:08.010 回答