C#ASP.NET复选框获胜';t在数据库中更新

本文关键字:数据库 更新 NET 复选框 获胜 C#ASP | 更新日期: 2023-09-27 18:20:40

似乎无法将我的复选框从前端代码连接到后端代码。我只想更新数据库中的复选框。

以下是来自SQL源的前端代码和Listview 的末尾

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
 SelectCommand="SELECT Create_Project.ProjectID, Create_Project.ProjectName, Create_Project.ProjectStartDate, Create_Project.ProjectEndDate, Offers.OfferID, Offers.UserID, Offers.Accept, Offers.Decline 
                FROM Create_Project 
                INNER JOIN Offers ON Create_Project.ProjectID = Offers.ProjectID 
                WHERE (Offers.UserID = @UserID) 
                ORDER BY Create_Project.ProjectStartDate DESC">
                <SelectParameters>
                    <asp:QueryStringParameter Name="UserID" QueryStringField="searchID" />
                </SelectParameters>
            </asp:SqlDataSource>

            <asp:ListView ID="ListView1" runat="server" DataKeyNames="ProjectID,OfferID" DataSourceID="SqlDataSource1">
                <AlternatingItemTemplate>
                </AlternatingItemTemplate>
                <EditItemTemplate>
                </EditItemTemplate>
                <EmptyDataTemplate>
                    <table runat="server" style="">
                        <tr>
                            <td>No data was returned.</td>
                        </tr>
                    </table>
                </EmptyDataTemplate>
                <InsertItemTemplate>
                </InsertItemTemplate>
                <ItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Label ID="ProjectIDLabel" runat="server" Text='<%# Eval("ProjectID") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ProjectNameLabel" runat="server" Text='<%# Eval("ProjectName") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ProjectStartDateLabel" runat="server" Text='<%# Eval("ProjectStartDate") %>' />
                        </td>
                        <td>
                            <asp:Label ID="ProjectEndDateLabel" runat="server" Text='<%# Eval("ProjectEndDate") %>' />
                        </td>
                        <td>
                            <asp:Label ID="OfferIDLabel" runat="server" Text='<%# Eval("OfferID") %>' />
                        </td>
                        <td>
                            <asp:Label ID="UserIDLabel" runat="server" Text='<%# Eval("UserID") %>' />
                        </td>
                        <td>
                            <asp:CheckBox ID="AcceptCheckBox" runat="server" Text="Accept"/>
                        </td>
                        <td>
                            <asp:CheckBox ID="DeclineCheckBox" runat="server" Text="Decline"/>
                        </td>
                        <td>
                        <asp:Button ID="Button1"  runat="server" Text="Save" class="btn btn-success" OnClick="Button1_Click" />
                        </td>
                    </tr>
                </ItemTemplate>
                <LayoutTemplate>
                    <table runat="server">
                        <tr runat="server">
                            <td runat="server">
                                <table id="itemPlaceholderContainer" runat="server" border="0" style="">
                                    <tr runat="server" style="">
                                        <th runat="server">ProjectID</th>
                                        <th runat="server">ProjectName</th>
                                        <th runat="server">ProjectStartDate</th>
                                        <th runat="server">ProjectEndDate</th>
                                        <th runat="server">OfferID</th>
                                        <th runat="server">UserID</th>
                                        <th runat="server">Accept</th>
                                        <th runat="server">Decline</th>
                                    </tr>
                                    <tr id="itemPlaceholder" runat="server">
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr runat="server">
                            <td runat="server" style=""></td>
                        </tr>
                    </table>
                </LayoutTemplate>
                <SelectedItemTemplate>
                </SelectedItemTemplate>
            </asp:ListView>

以及后端

protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
            conn.Open();
            {
                bool Accept = false;
                bool Decline = false;
                foreach (ListViewDataItem item in Listview1.Items)
                {
                    CheckBox findcheckbox = (CheckBox)item.FindControl("AcceptCheckbox");
                    if (findcheckbox.Checked)
                    {
                        Accept = true;
                        Decline = false;
                    }
                    else
                    {
                        Accept = false;
                        Decline = true;
                    }
                }
                string selectString = "UPDATE Offers SET (Accept, Decline VALUES ('" + Accept + "', '" + Decline + "')";
                SqlCommand usersql = new SqlCommand(selectString, conn);
                usersql.ExecuteNonQuery();
                Response.Write("<script type='text/javascript'>");
                Response.Write("alert('You have made your decision');");
                Response.Write("document.location.href='Offers.aspx';");
                Response.Write("</script>");

            }
        }

C#ASP.NET复选框获胜';t在数据库中更新

首先,您应该考虑使用SqlParameters,而不是将参数放在要查询的字符串中,以避免sql注入。

其次,UPDATE不在INTO之后,只是UPDATE OFFERS SET ACCEPT = @YOURVALUE, DECLINE = @YOUROTHERVALUE,您应该考虑使用WHERE子句,如果不使用,它将更新您的所有记录。

您需要以这种方式使用findcontrol

 CheckBox findcheckbox = (CheckBox)Listview1.FindControl("AcceptCheckbox");

现在,在检查条件时,您需要使用findcheckbox

if(findcheckbox.Checked)
{
//your code
}

第1版:

基于评论的输入这里是按钮点击代码

    protected void Button1_Click(object sender, EventArgs e) {
     try
     {

         SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
         conn.Open();
         {
             bool Accept = false;
             bool Decline = false;
             foreach (ListViewDataItem item in ListView1.Items)
             {
                 CheckBox findcheckbox = (CheckBox)item.FindControl("AcceptCheckbox");
                 if (findcheckbox.Checked)
                 {
                     Accept = true;
                     Decline = false;
                 }
                 else
                 {
                     Accept = false;
                     Decline = true;
                 }
             }
             string selectString = "UPDATE Offers SET (Accept, Decline VALUES ('" + Accept + "', '" + Decline + "')";
             SqlCommand usersql = new SqlCommand(selectString, conn);
             usersql.ExecuteNonQuery();
             Response.Write("<script type='text/javascript'>");
             Response.Write("alert('You have made your decision');");
             Response.Write("document.location.href='Offers.aspx';");
             Response.Write("</script>");

         }
     }
     catch(Exception ex)
     {
         throw ex;
     }
    }