【问题标题】:populating sql database from gridview checkbox从 gridview 复选框填充 sql 数据库
【发布时间】:2014-05-12 13:03:23
【问题描述】:

我正在尝试在 gridview 部分的末尾添加一个复选框,一旦检查它就会使用“1”或“0”更新 sql 数据库。是的,它是用列名 posFill 完成的。

这里是代码......

protected void gvPerson_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlconnection"].ToString()))
        {

            SqlCommand cmd = new SqlCommand();


            cmd.Connection = conn;


            cmd.CommandText = "UPDATE requests SET date = @date, submitted_by = @submitted_by, position = @position, district = @district, base_store = @base_store, travel_to = @travel_to, open_til6 = @open_til6, email_add = @email_add, comments = @comments, posFill = @posFill, interviewDate = @interviewDate  WHERE _id = @_id";


            cmd.CommandType = CommandType.Text;

            // Get the PersonID of the selected row.
            string strID = gvPerson.Rows[e.RowIndex].Cells[2].Text;
            string strPosition = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox1")).Text;
            string strEmail_add = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox2")).Text;
            string strDate = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox3")).Text;
            string strSubBy = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox4")).Text;
            string strDist = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox5")).Text;
            string strBase = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox6")).Text;
            string strTravel = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox7")).Text;
            string strOpen = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox8")).Text;
            string strComments = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox9")).Text;
            //string strFilled = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox10")).Text;
            string strIntDate = ((TextBox)gvPerson.Rows[e.RowIndex].FindControl("TextBox11")).Text;
            string strLblFilled = ((Label)gvPerson.Rows[e.RowIndex].FindControl("lblFilled")).Text;

            // Append the parameters.
            cmd.Parameters.Add("@_id", SqlDbType.Int).Value = strID;
            cmd.Parameters.Add("@position", SqlDbType.NVarChar, 50).Value = strPosition;
            cmd.Parameters.Add("@email_add", SqlDbType.NVarChar, 50).Value = strEmail_add;
            cmd.Parameters.Add("@date", SqlDbType.Date).Value = strDate;
            cmd.Parameters.Add("@submitted_by", SqlDbType.NVarChar, 50).Value = strSubBy;
            cmd.Parameters.Add("@district", SqlDbType.NVarChar, 50).Value = strDist;
            cmd.Parameters.Add("@base_store", SqlDbType.NVarChar, 50).Value = strBase;
            cmd.Parameters.Add("@travel_to", SqlDbType.NVarChar, 50).Value = strTravel;
            cmd.Parameters.Add("@open_til6", SqlDbType.NVarChar, 50).Value = strOpen;
            cmd.Parameters.Add("@comments", SqlDbType.NVarChar, 50).Value = strComments;
            //cmd.Parameters.Add("@posFilled", SqlDbType.NVarChar, 50).Value = strFilled;
            cmd.Parameters.Add("@interviewDate", SqlDbType.Date).Value = strIntDate;
            cmd.Parameters.Add("@posFill", SqlDbType.Bit).Value = strLblFilled;

            // Open the connection.
            conn.Open();

            // Execute the command.
            cmd.ExecuteNonQuery();
        }

        // Exit edit mode.
        gvPerson.EditIndex = -1;

        // Rebind the GridView control to show data after updating.
        BindGridView();

        // Show the Add button.
        lbtnAdd.Visible = true;
    }

这里是复选框的功能...

protected void posFilled_CheckChanged(object sender, System.EventArgs e)
    {
        if (chkFilled.Checked == true)
        { lblFilled.Text = "1"; }
        else
        { lblFilled.Text = "0"; }


    }

复选框在 gridview 上并且正在运行,但这里也是它的代码。

<asp:TemplateField HeaderText="Filled" SortExpression="posFill">
                <EditItemTemplate>
                    <asp:CheckBox ID="chkFilled" runat="server" AutoPostBack="true" />
                    <asp:Label ID="lblFilled" runat="server" Visible="true"></asp:Label>
                    <%--<asp:TextBox ID="TextBox10" runat="server" Text='<%# Bind("posFilled") %>'></asp:TextBox>--%>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkFilled2" runat="server"/>
                    <asp:Label ID="lblFilled" runat="server" Visible="true"></asp:Label>
                    <%--<asp:Label ID="Label10" runat="server" Text='<%# Bind("posFilled") %>'></asp:Label>--%>
                </ItemTemplate>

提前谢谢你。我添加了一个标签来查看响应是什么,或者它是否响应,如果它响应了,那么只需使用标签内容。但宁愿不要。

【问题讨论】:

  • 有问题吗?请明确说明您要问的是什么
  • 我正在尝试在 gridview 部分的末尾添加一个复选框,一旦选中它就会使用“1”或“0”更新 sql 数据库。是的,它是用列名 posFill 完成的。

标签: c# asp.net sql gridview checkbox


【解决方案1】:

不使用“1”.ToString() 或“0”.ToString(),为什么不直接使用控件本身呢?你不需要标签。

    cmd.Parameters.Add("@posFill", SqlDbType.Bit).Value = chkFilled.Checked;

编辑:

 cmd.Parameters.Add("@posFill", SqlDbType.Bit).Value = ((CheckBox)gvPerson.Rows[e.RowIndex].FindControl("chkFilled")).Checked;

EDIT2:

你只有一个 int 列。您应该这样做以确保您输入的值与参数的数据类型匹配:

 int tempInt = -1;

 if (int.TryParse(strID, out tempInt))
 {
      cmd.Parameters.Add("@_id", SqlDbType.Int).Value = tempInt;

      cmd.ExecuteNonquery();
 }

事实上,您应该在尝试执行命令之前验证所有数据。您应该为所有参数分配正确的数据类型。如果你传递的是 SqlDbType.Date,你应该传递一个 DateTime 变量,它实际上应该解析为一个 DateTime。

【讨论】:

  • 感谢您的回复。我已经尝试过了,但是出于某种不虔诚的原因,每当我把它放在那里时,我都会得到 chkFilled.Checked 在当前上下文中不存在。
  • 我已经编辑了我的回复。现在应该为您提供该特定行中所需的 CheckBox。让我知道这是否适合你。如果你能找到你的标签并得到它的文本,那么你应该能够找到你的 CheckBox 并得到它是否被选中。 =)
  • 我相信这是可行的,但是....当我提交更新时,它会抛出一个无法将字符串转换为 int32 的错误。
  • 你只有一个 int 列。您应该这样做以确保您输入的值与参数的数据类型匹配: int tempInt = -1; if (int.TryParse(strID, out tempInt)) { command.ExecuteNonquery();实际上,您应该在尝试执行命令之前验证所有数据。
  • 这就是我不理解的,因为直到我添加了复选框和您建议一切正常工作的行。我想知道它是否与 posFill 数据库中的“位”相关联。当复选框被选中时,它只是对或错。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2014-02-25
相关资源
最近更新 更多