【问题标题】:CheckBox Not Sending Checked Value to Database C# AspCheckBox 未将检查值发送到数据库 C# Asp
【发布时间】:2015-10-21 12:39:56
【问题描述】:

我正在制作一个考勤系统,在该系统中,我从带有复选框的 Gridview 中的学生表中获取学生记录。勾选学生在场的复选框,不勾选缺席的学生。 之后,我将我的记录提交到考勤系统。 问题:如果我勾选或未勾选,提交出勤后会在数据库结果中显示缺席,请检查我的代码。

HTML

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="RecordTablesss.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="LabelSr" runat="server" Text=<%#Eval("Sr_Number") %>></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="LabelName" runat="server" Text=<%#Eval("Name") %>></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Label ID="LabelFN" runat="server" Text=<%#Eval("F_Name") %>></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="CheckAttendence" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:Button ID="ButtonSubmit" runat="server" Text="Submit" OnClick="SaveAttendence" style="width: 61px" />
    </div>
    </form>
</body>
</html>

代码背后:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;

namespace RecordTablesss
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            loadData();
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void loadData()
        {
            SqlConnection con = new SqlConnection("Data Source=HammadMaqbool;Initial Catalog=FYP_Demo;Integrated Security=True");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter("Select Sr_Number,Name,F_Name From Registerd_Student",con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            GridView1.DataSource = ds.Tables[0];
            GridView1.DataBind();
        }

        protected void SaveAttendence(object sender, EventArgs e)
        {
            foreach (GridViewRow row in GridView1.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    string sta = "A";
                    CheckBox chkVar_ = row.FindControl("CheckAttendence") as CheckBox;
                    if (chkVar_.Checked)
                        sta = "P";

                    string StudentName = (row.FindControl("LabelName") as Label).Text;
                    string F_Name = (row.FindControl("LabelFN") as Label).Text;
                    int Number = int.Parse( (row.FindControl("LabelSr") as Label).Text);
                    //From Here to onword Database Operations. ..  
                    SqlConnection conn = new SqlConnection("Data Source=HammadMaqbool;Initial Catalog=FYP_Demo;Integrated Security=True");
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("Insert into Attendance_B values('"+Convert.ToInt32(Number)+"','"+StudentName+"','"+F_Name+"','"+sta+"')",conn);
                    cmd.ExecuteNonQuery();
                }
            }
        }

        protected void ButtonSubmit_Click(object sender, EventArgs e)
        {

        }
    }
}

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 在问问题之前先调试你的代码
  • @Hammad 你忘了写else...
  • @too_cool 添加了其他问题仍然存在。 . .
  • Marc_s 好的,我会的。 . .使用参数化查询。 .

标签: c# sql asp.net checkbox


【解决方案1】:

我认为你并没有真正写出你的意思:

string sta = "";
CheckBox chkVar_ = row.FindControl("CheckAttendence") as CheckBox;
if (chkVar_.Checked)
    sta = "P";
sta = "A";

我认为你的意思是:

string sta = "";
CheckBox chkVar_ = row.FindControl("CheckAttendence") as CheckBox;
if (chkVar_.Checked)
{
    sta = "P";
}
else
{
    sta = "A";
}

你看出区别了吗?

【讨论】:

  • 它仍然无法正常工作。 . . :(请有其他建议或解决方案?
  • 有一些要点 - 首先:如果用户单击复选框,您是否单步执行您的代码来查看记录是否真的被插入?第二:如果插入了记录,你的数据集应该如何知道这一点?您没有在查询中使用出勤表。
  • 点赞?你能解决这个问题吗?如果可以请?做吧
  • 嗯,Thomas,我不认为这些要点会解决我的问题,看... CheckBox 记录已插入,但只有缺席值... 不处理当前的,这是问题...。可能是你的仪式,但我没有得到你的分数。 .你能帮我解决吗?
【解决方案2】:

正如您所说@Thomas Krojer 回答也不能解决您的问题,但应该可以。

你得到的chkVar_.Checked总是错误的。因为在Page_Load上,你再次绑定gridview而不检查它是否是postback。 尝试这个。

 protected void Page_Load(object sender, EventArgs e)
   {
          if (!Page.IsPostBack)
            {
                loadData();
            }
    }

它一定会解决你的问题..

【讨论】:

  • 谢谢@too_cool,午休前没看到,现在回来为你+1
  • @ThomasKrojer 欢迎快乐编码..你也可以接受我的回答:P
  • @ThomasKrojer 对不起,我没有意识到这是你的评论..有点心不在焉..重播时..:D
【解决方案3】:

你只需要更正代码

if (chkVar_.Checked)
{
    sta = "P";
}
else
{
    sta = "A";
}

【讨论】:

  • page_load 处的正确代码受保护 void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack == false) { loadData(); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2019-11-23
  • 2016-12-20
相关资源
最近更新 更多