私は2時間以上私の頭を掻いてきました。私はそれを理解できないようです。ASP.NET C#elseが無視される場合は?
基本的に私が行ったのは、選択した入札者ボタンをクリックすると、ステータスの下に「勝者」が表示されました。問題は、ボトムセレクトの入札者ボタンを選択し、その上にあるボタンをアクティブにするときです。エラーメッセージ "勝者を選択できません。エラー原因:既に勝者を選択しました。"というエラーメッセージが表示されます。は無視され、ステータスフィールドに「勝者」と書き込まれます。
私は別の方法でやろうとするとエラーメッセージが表示されます。最初の行のボタンを選択してステータスを勝者に設定し、2行目のボタンを選択すると、すでに他の人物を選んだので勝者を選ぶことはできません。
私のC#コード:
protected void rptrBindBidders_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "Winner" && e.CommandArgument.ToString() != "")
{
Int64 onsaleID = Convert.ToInt64(Request.QueryString["saleID"]);
String CS = ConfigurationManager.ConnectionStrings["DatabaseSQLConnectionString1"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
using (SqlCommand cmd1 = new SqlCommand("select * from Bidders where saleID=" + onsaleID + " ", con))
{
SqlDataAdapter sda = new SqlDataAdapter(cmd1);
DataTable dt = new DataTable();
sda.Fill(dt);
string BidderStatus = dt.Rows[0]["BidderStatus"].ToString().Trim();
if (BidderStatus == "Winner")
{
lblmessage.ForeColor = Color.Red;
lblmessage.Text = "Cannot select winner. Error cause: You have already selected a winner.";
}
else
{
using (SqlCommand cmd = new SqlCommand("update Bidders set [BidderStatus]='Winner' where [bidID]='" + e.CommandArgument.ToString() + "'", con))
{
con.Open();
cmd.ExecuteNonQuery();
lblmessage.ForeColor = Color.Green;
lblmessage.Text = "Success! A bidder has been selected!";
con.Close();
}
}
this.BindBidders();
}
}
}
}
}
私のHTMLコード:おそらくbidIdとsaleIdを混同
<asp:Repeater ID="rptrBindBidders" onItemCommand="rptrBindBidders_ItemCommand" runat="server">
<HeaderTemplate>
<table class="table">
<thead>
<tr>
<th>Bidders</th>
<th>Date bidded</th>
<th>Price Offer</th>
<th>Status</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("BidderName") %></td>
<td><%#Eval("DateBidded") %></td>
<td>₱<%# Eval("bidPrice") %></td>
<td><%# Eval("BidderStatus") %></td>
<td><asp:Button ID="btnSelectBuyer" runat="server" Text="Select Bidder" CommandName="Winner" CommandArgument='<%#Eval("bidID") %>'/></td>
<!--<asp:HiddenField ID="hfbidID" Value='' runat="server" />-->
<!--<asp:HiddenField ID="hfBidderName" Value='' runat="server" />-->
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
'If'は決して無視されません。 'Else'は決して無視されません。コンパイラは常に、常に、あなたがそれを与える指示に常に忠実に従います。ブレークポイントを入れ、デバッガでコードをステップ実行して、実際に何が実行されているか調べます。変数の上にマウスを置くか、ウォッチウィンドウを使用して、なぜそれが何をするのかを理解してください。 'BidderStatus'が何であるかを調べる。前提を作ることによって、あなたの周りの世界について何も学ぶことはできません。外に出て観察するだけで学ぶことができます。 –
クエリのSQLインジェクションに注意してください。 – Alejandro