【问题标题】:Change GridView's "Checked Out" column from a button to a label based on whether cardNumber is null or not根据 cardNumber 是否为空,将 GridView 的“已签出”列从按钮更改为标签
【发布时间】:2012-04-13 00:30:13
【问题描述】:

注意:我是一名初级 Web 开发人员,对 PHP 有点熟悉。我一直对 ASP.NET 很好奇,想尝试一下。

现在,我正在尝试显示如下表格的小型库应用程序:

Title                - Author        - Status
The Eye of the World - Robert Jordan - Checked Out
The Great Hunt       - Robert Jordan - Check Out
The Dragon Reborn    - Robert Jordan - Check Out

我创建了一个 DataSet 和一个执行以下查询的 TableAdapter:

SELECT        books.SerialNumber, books.Title, books.Author, CheckedOut.cardNumber
FROM            books LEFT OUTER JOIN
                         CheckedOut ON books.SerialNumber = CheckedOut.SerialNumber

我这样做是为了获得 NULL 或 cardNumber 以供下面使用。

这是我主页的当前状态:

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="Browse.aspx.cs" Inherits="_Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="SerialNumber,cardNumber" DataSourceID="ObjectDataSource1" 
        OnRowDataBound="browseMethod"
        AllowPaging="True" onselectedindexchanged="GridView1_SelectedIndexChanged">
        <Columns>
            <asp:BoundField DataField="SerialNumber" HeaderText="SerialNumber" 
                InsertVisible="False" ReadOnly="True" SortExpression="SerialNumber" 
                Visible="False" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Author" HeaderText="Author" 
                SortExpression="Author" />
            <asp:BoundField DataField="cardNumber" HeaderText="cardNumber" 
                SortExpression="cardNumber" Visible="False" />
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    <asp:Button ID="Button1" runat="server" 
                        CommandArgument='<%# Eval("cardNumber") %>' 
                        Text="Check Out" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
</asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
        OldValuesParameterFormatString="original_{0}" SelectMethod="GetLibraryBooks" 
        TypeName="DataSet1TableAdapters.DataTable1TableAdapter">
    </asp:ObjectDataSource>
</asp:Content>

当该行的“cardNumber”值为 NULL 时,我希望能够将“签出”按钮更改为标签(“签出”)。另外,如何在调用每个按钮时创建一个事件,并获取正确的序列号?

【问题讨论】:

    标签: c# asp.net sql visual-studio


    【解决方案1】:

    您可以创建另一个控件标签并将其可见性设置为 false。您已经为按钮设置了命令参数。也给命令名称。

    <asp:Button ID="Button1" runat="server"                          CommandArgument='<%# Eval("cardNumber") %>'          CommandName="CheckOut"                 Text="Check Out" /> 
    

    在 gridview_rowCommand 回调中检查命令名称并执行操作。将按钮的可见性设置为 false 并将标签设置为 true。另一个选项是启用/禁用按钮,如上面的答案中所讨论的,其中禁用样式一种看起来像标签的方式。对于网格视图命令参数,请参阅以下链接:- http://msdn.microsoft.com/en-us/library/bb907626.aspx

    【讨论】:

      【解决方案2】:

      在browseMethod中,当网格被填充时,它将为网格中的每一行调用。因此,您可以根据条件使按钮启用或禁用..

      您可以通过按钮名称“Button1”使用 row.FindControl 获取按钮并将其转换为按钮并调用 button.Enabled = true 或 false.. 基于 cc 编号..

      我希望这能引导你走上正确的道路......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2013-07-20
        • 1970-01-01
        • 2011-07-04
        • 2012-01-29
        相关资源
        最近更新 更多