イベントを一覧表示する登録システムを開発しており、ユーザーはこれらのイベントに登録できます。各イベントには特定の座席数があります。私が今直面している問題は、登録数が座席数に達した場合でも、イベントはまだ利用可能であり、予約ボタンを無効にして予約プロセスを停止することはできません.
参考までに、次のデータベース設計があります。
Event Table: ID, Title, NumberOfSeats
BookingDetails Table: BookingID, EventID, Username
User Table: Username, Name
イベントは GridView コントロールに一覧表示され、イベントで予約するために GridView 内に LinkButton があります。私は ModalPopUp Extender コントロールを使用しています。これが、以下の ASP.NET コードに示すように LinkButton を使用している理由です。コード ビハインドの GrivView_RowDataBound 内で、各イベントの座席数と予約数を比較しました。予約数が座席数以上の場合。予約ボタンを無効にする必要があります。コードを書きましたが、それが機能しない理由と次のエラーが発生する理由がわかり ません: タイプ 'System.Web.UI.WebControls.GridView' のオブジェクトをタイプ 'System.Web にキャストできません。 UI.WebControls.LinkButton'.
ASP.NET コード:
<asp:GridView ID="ListOfAvailableEvents_GrivView" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333"
GridLines="None" AllowPaging="True" PageSize="10"
onrowdatabound="ListOfAvailableEvents_GrivView_RowDataBound">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" CssClass="generaltext" />
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="lnkTitle" runat="server" CssClass="button" Text="Book →" OnClick="lnkTitle_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<asp:BoundField DataField="Location" HeaderText="Location" SortExpression="Location" />
<asp:BoundField DataField="StartDateTime" HeaderText="Start Date & Time" SortExpression="StartDateTime" />
<asp:BoundField DataField="EndDateTime" HeaderText="End Date & Time" SortExpression="EndDateTime" />
</Columns>
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle Font-Bold="True" CssClass="complete" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<EmptyDataTemplate><h2>No Events Available</h2></EmptyDataTemplate>
</asp:GridView>
コード ビハインド (C#) コード:
protected void ListOfAvailableEvents_GrivView_RowDataBound(object sender, GridViewRowEventArgs e)
{
int numberOfBookings = 0;
int numberOfAvailableSeats = 0;
string connString = "..........."
string selectCommand = @"SELECT COUNT(*) AS UserBookingsCount, dbo.Events.NumberOfSeats
FROM dbo.BookingDetails INNER JOIN
dbo.Events ON dbo.BookingDetails.EventID = dbo.Events.ID
GROUP BY dbo.Events.NumberOfSeats";
using (SqlConnection conn = new SqlConnection(connString))
{
//Open DB Connection
conn.Open();
using (SqlCommand cmd = new SqlCommand(selectCommand, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
{
numberOfBookings = Int32.Parse(reader["UserBookingsCount"].ToString());
numberOfAvailableSeats = Int32.Parse(reader["NumberOfSeats"].ToString());
}
}
//Close the connection
conn.Close();
}
if (numberOfBookings >= numberOfAvailableSeats)
{
LinkButton bookButton = (LinkButton)(sender);
bookButton.Enabled = false;
}
}
では、この問題を解決する方法を教えてください。
アップデート:
GridView には、さまざまなイベントが一覧表示されます。そのうちの1つを取り上げましょう。イベント A に空席が 3 つあり、予約数が 3 に達した場合、すべてのイベントではなく、このイベントに対してのみ [予約] ボタンを無効にする必要があります。そのため、予約数が空席数に達すると、このイベントのボタンは無効になります。