【问题标题】:C# ASP.NET Checkboxes won't update in DatabaseC# ASP.NET 复选框不会在数据库中更新
【发布时间】:2016-02-05 00:52:03
【问题描述】:

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

这是来自 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>");


            }
        }

【问题讨论】:

  • 将您的代码发布到问题中;不要发布文本的屏幕截图...
  • 旁注:永远不要连接查询中使用的字符串,这在某些时候会使您的系统容易受到 sql 注入攻击。请改用参数化查询。

标签: c# asp.net listview checkbox webforms


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你需要这样使用findcontrol

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

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

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

    编辑1:

    基于评论中的输入 这里是 Button_click 代码

        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;
         }
        }
    

    【讨论】:

    • @edgar 链接可能会失效尝试在此处发布代码,以便来自 Google 的用户在未来发现它有用!
    • 在 c# 中似乎找不到 ListView1,但它定义为 Listview1
    • 试过改成ItemTemplate,也没用
    • foreach (ListViewDataItem item in Listview1.Items) { CheckBox findcheckbox = (CheckBox)item.FindControl("AcceptCheckbox"); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多