база данных показывает все 0, когда флажки должны показывать один - PullRequest
0 голосов
/ 06 января 2020

Я довольно новичок в программировании в целом. Я создаю веб-страницу, где пользователь выбирает процесс из sql заполненного выпадающего списка. Вид сетки затем заполняется соответствующими результатами с помощью флажков. Конечный пользователь может установить флажок, и это должно сохранить значение 1 в базе данных, чтобы позже я мог извлечь отмеченные элементы для другого вида сетки. К сожалению, это только заполнение нулей. Как я могу это исправить?

 protected void btnSave_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            CheckBox checkBox1 = (row.Cells[0].FindControl("CheckBox1") as CheckBox);

            if (checkBox1.Checked)
            {
                string updateData = "update AuditChecklist$ set IsSelected = @IsSelected";
                SqlConnection con = new SqlConnection(conString);
                con.Open();
                SqlCommand cmd = new SqlCommand(updateData, con);
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@IsSelected", 1);

                cmd.ExecuteNonQuery();
                con.Close();

            }
           else if(!checkBox1.Checked)
            {
                string updateData = "update AuditChecklist$ set IsSelected = @IsSelected";
                SqlConnection con = new SqlConnection(conString);
                con.Open();
                SqlCommand cmd = new SqlCommand(updateData, con);
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@IsSelected", 0);

                cmd.ExecuteNonQuery();
                con.Close();
            }

        }

Попробовал следующий код, как предложено, но у меня все еще остается та же проблема. Я включил свой дизайн и ASP код для дальнейшей помощи.

 protected void btnSave_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            CheckBox checkBox1 = (row.Cells[0].FindControl("CheckBox1") as CheckBox);



            string updateData = "update AuditChecklist$ set IsSelected = @IsSelected";

                SqlConnection con = new SqlConnection(conString);
                con.Open();
                SqlCommand cmd = new SqlCommand(updateData, con);
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@IsSelected", checkBox1.Checked ? 1 : 0);
                cmd.ExecuteNonQuery();
                con.Close();

        }

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource2" ForeColor="#333333" GridLines="None" Height="377px" Width="764px" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:TemplateField HeaderText="Select">
                    <EditItemTemplate>
                        <asp:CheckBox ID="CheckBox1" runat="server" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="CheckBox1" runat="server" />
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
                </asp:TemplateField>
                <asp:BoundField DataField="FAST_Screen" HeaderText="FAST Screen" SortExpression="FAST_Screen">
                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                </asp:BoundField>
                <asp:BoundField DataField="Audit_Detail" HeaderText="Audit Detail" SortExpression="Audit_Detail">
                <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                </asp:BoundField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">Delete</asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
    </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:QMSAuditConnectionString %>" SelectCommand="SELECT [FAST Screen] AS FAST_Screen, [Audit Detail] AS Audit_Detail, [EPS Process] AS EPS_Process, [IsSelected] FROM [AuditChecklist$] WHERE ([EPS Process] = @EPS_Process)">
            <SelectParameters>
                <asp:ControlParameter ControlID="LstProcess" Name="EPS_Process" PropertyName="SelectedValue" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>

Дизайн

1 Ответ

0 голосов
/ 06 января 2020

Кажется, вы установили свойство ThreeState CheckBox на true , поэтому его необходимо изменить на false .

Не нужно писать одинаковые коды дважды только для одного условия проверки.

CheckBox checkBox1 = (row.Cells[0].FindControl("CheckBox1") as CheckBox);

string updateData = "update AuditChecklist$ set IsSelected = :@IsSelected";
SqlConnection con = new SqlConnection(conString);
con.Open();
SqlCommand cmd = new SqlCommand(updateData, con); 
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@IsSelected", checkBox1.Checked ? 1 : 0);
cmd.ExecuteNonQuery();
con.Close();

Также будет лучше, если в операторе обновления есть какой-либо фильтр (с помощью предложения where) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...