使用 findcontrol 查找 gridview 中的值,并将其与数据库中的数据进行比较
Find the value in gridview using findcontrol and comapre it with data in database
protected void LinkButton_Click(Object sender, EventArgs e)
{
String MyConnection2 = "Server=localhost;database=ovs;Uid=root;password=; Convert Zero Datetime=True";
DateTime time = DateTime.Now; // Use current time
string format = "yyyy-MM-dd HH:mm:ss";
string UserName4 = HttpContext.Current.User.Identity.Name;
GridViewRow grdrow = (GridViewRow)((LinkButton)sender).NamingContainer;
Label lblStudentId = (Label)grdrow.Cells[0].FindControl("lblID");
string studentId = lblStudentId.Text;
String query = "insert into voting (CandidateStudentID,voterStudentID,DateTime)values ('" + lblStudentId.Text + "','" + Session["UserName"].ToString() + "','" + time.ToString(format) + "')";
foreach (GridViewRow row in GridView2.Rows)
{
Label lblVoter = row.FindControl("lblVoter") as Label;
string voterID = lblVoter.Text;
if (Session["UserName"].ToString().Equals(lblVoter.Text))
{
Label1.Text = "You voted before";
}
}
MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
MySqlDataReader MyReader2;
MyConn2.Open();
MyReader2 = MyCommand2.ExecuteReader();
Label2.Text = "Thank you for You Vote";
}
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" Font-Size="Medium">
<Columns>
<asp:TemplateField HeaderText="Student ID">
<ItemTemplate>
<asp:Label ID="lblVoter" runat="server" Width="150px" Text='<%#Eval("voterStudentID") %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void loadCandidate()
{
con.Open();
MySqlCommand cmd = new MySqlCommand("select studentID ,name from candidate ", con);
MySqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows == true)
{
GridView1.DataSource = dr;
GridView1.DataBind();
con.Close();
con.Open();
MySqlCommand cmd2 = new MySqlCommand("select voterStudentID from voting ", con);
MySqlDataReader dr2 = cmd2.ExecuteReader();
GridView2.DataSource = dr2;
GridView2.DataBind();
}
}
StudentID display in gridview2
我想防止在数据库中重复投票。现在我面临一个问题,当用户以 StudentID table 中的第一个用户身份登录时,即 1909404,当 1909404 已经存在于数据库中时,它将显示错误消息。但是当用户以StudentIDtable为1909362的第二个用户登录时,即使用户ID已经存在,也不会显示错误信息。只要数据库中存在用户 ID(这意味着他们之前投票过),我就想显示错误消息。
改成这样....
foreach (GridViewRow row in GridView2.Rows) {
Label lblVoter = row.FindControl("lblVoter") as Label;
if (Session["UserName"].ToString().Equals(lblVoter.Text)) {
Label1.Text = "You voted before";
return;
}
}
// Since we looped through all the rows and did NOT find a match...
// Then they can vote
MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
MySqlDataReader MyReader2;
MyConn2.Open();
MyReader2 = MyCommand2.ExecuteReader();
Label2.Text = "Thank you for You Vote";
protected void LinkButton_Click(Object sender, EventArgs e)
{
String MyConnection2 = "Server=localhost;database=ovs;Uid=root;password=; Convert Zero Datetime=True";
DateTime time = DateTime.Now; // Use current time
string format = "yyyy-MM-dd HH:mm:ss";
string UserName4 = HttpContext.Current.User.Identity.Name;
GridViewRow grdrow = (GridViewRow)((LinkButton)sender).NamingContainer;
Label lblStudentId = (Label)grdrow.Cells[0].FindControl("lblID");
string studentId = lblStudentId.Text;
String query = "insert into voting (CandidateStudentID,voterStudentID,DateTime)values ('" + lblStudentId.Text + "','" + Session["UserName"].ToString() + "','" + time.ToString(format) + "')";
foreach (GridViewRow row in GridView2.Rows)
{
Label lblVoter = row.FindControl("lblVoter") as Label;
string voterID = lblVoter.Text;
if (Session["UserName"].ToString().Equals(lblVoter.Text))
{
Label1.Text = "You voted before";
}
}
MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
MySqlDataReader MyReader2;
MyConn2.Open();
MyReader2 = MyCommand2.ExecuteReader();
Label2.Text = "Thank you for You Vote";
}
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" Font-Size="Medium">
<Columns>
<asp:TemplateField HeaderText="Student ID">
<ItemTemplate>
<asp:Label ID="lblVoter" runat="server" Width="150px" Text='<%#Eval("voterStudentID") %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void loadCandidate()
{
con.Open();
MySqlCommand cmd = new MySqlCommand("select studentID ,name from candidate ", con);
MySqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows == true)
{
GridView1.DataSource = dr;
GridView1.DataBind();
con.Close();
con.Open();
MySqlCommand cmd2 = new MySqlCommand("select voterStudentID from voting ", con);
MySqlDataReader dr2 = cmd2.ExecuteReader();
GridView2.DataSource = dr2;
GridView2.DataBind();
}
}
StudentID display in gridview2
我想防止在数据库中重复投票。现在我面临一个问题,当用户以 StudentID table 中的第一个用户身份登录时,即 1909404,当 1909404 已经存在于数据库中时,它将显示错误消息。但是当用户以StudentIDtable为1909362的第二个用户登录时,即使用户ID已经存在,也不会显示错误信息。只要数据库中存在用户 ID(这意味着他们之前投票过),我就想显示错误消息。
改成这样....
foreach (GridViewRow row in GridView2.Rows) {
Label lblVoter = row.FindControl("lblVoter") as Label;
if (Session["UserName"].ToString().Equals(lblVoter.Text)) {
Label1.Text = "You voted before";
return;
}
}
// Since we looped through all the rows and did NOT find a match...
// Then they can vote
MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
MySqlDataReader MyReader2;
MyConn2.Open();
MyReader2 = MyCommand2.ExecuteReader();
Label2.Text = "Thank you for You Vote";