为gridview绑定Radiobutton并再次将绑定值插入到数据库中
问题描述:
我正在处理一个项目我将Radiobutton绑定到网格视图,并将数据正确地抓取到GridView现在我想再次插入RadioButton的选中和未选中的值到数据库,但无法正常工作,它将所有RadioButton作为false传递。是为了澄清波纹管是否是代码。 之前我很感谢你的回答。为gridview绑定Radiobutton并再次将绑定值插入到数据库中
代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace Online_Examination_System
{
public partial class FormAnswers : System.Web.UI.Page
{
int count;
ClassCommon obj = new ClassCommon();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
count = 1;
}
DataTable dt = new DataTable();
dt = obj.GetData("select Question from tblQuestions where QId='" + count + "'");
gvQuestions.DataSource = dt;
gvQuestions.DataBind();
DataTable dt2 = new DataTable();
dt2 = obj.GetData("select Answer from tblAnswers where QId='" + count + "'");
gvAnswers.DataSource = dt2;
gvAnswers.DataBind();
}
protected void btnSave_Click(object sender, EventArgs e)
{
count = 1;
if (ViewState["view"] != null)
{
count = Convert.ToInt16(ViewState["view"]);
}
ViewState["view"] = count + 1;
DataTable dt = new DataTable();
dt = obj.GetData("select Question from tblQuestions where QId='" + ViewState["view"] + "'");
gvQuestions.DataSource = dt;
gvQuestions.DataBind();
DataTable dt2 = new DataTable();
dt2 = obj.GetData("select Answer from tblAnswers where QId='" + ViewState["view"] + "'");
gvAnswers.DataSource = dt2;
gvAnswers.DataBind();
if (!IsPostBack)
{
for (int i = 1; i < gvAnswers.Rows.Count; i++)
{
int V;
RadioButton rBtnAnswer = gvAnswers.Rows[i].FindControl("rbtnSelect") as RadioButton;
if (rBtnAnswer.Checked)
{
V = 1;
}
else
{
V = 0;
}
Label txtAnswered = gvAnswers.Rows[i].FindControl("lblAnswer") as Label;
obj.ExeQurey("insert into tblResult values('" + V + "','" + txtAnswered.Text + "',Null,NULL,NULL,Null)");
}
}
}
HTML
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FormAnswers.aspx.cs" Inherits="Online_Examination_System.FormAnswers" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
function SelectRadioButton(radio) {
var rdBtn = document.getElementById(radio.id);
var rdBtnList = document.getElementsByTagName("input");
for (i = 0; i < rdBtnList.length; i++) {
if (rdBtnList[i].type == "radio" && rdBtnList[i].id != rdBtn.id) {
rdBtnList[i].checked = false;
}
}
}
</script>
<title></title>
<style type="text/css">
.style1
{
width: 100%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<table class="auto-style1">
<tr>
<td class="auto-style1">
<asp:GridView ID="gvQuestions" runat="server" GridLines="None">
</asp:GridView>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1"> </td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:GridView ID="gvAnswers" runat="server" GridLines="None" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:RadioButton ID="rbtnSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Answer">
<ItemTemplate>
<asp:Label ID="lblAnswer" runat="server" Text='<%# Bind("Answer") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
<td> </td>
</tr>
<tr>
<td class="auto-style1">
<asp:Button ID="btnSave" runat="server" Text="Next" OnClick="btnSave_Click" />
</td>
<td> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
答
下面的代码将永远不会得到执行,因为它里面的!IsPostBack
条件。
for (int i = 1; i < gvAnswers.Rows.Count; i++)
{
int V;
RadioButton rBtnAnswer = gvAnswers.Rows[i].FindControl("rbtnSelect") as RadioButton;
if (rBtnAnswer.Checked)
{
V = 1;
}
else
{
V = 0;
}
Label txtAnswered = gvAnswers.Rows[i].FindControl("lblAnswer") as Label;
obj.ExeQurey("insert into tblResult values('" + V + "','" + txtAnswered.Text + "',Null,NULL,NULL,Null)");
}
您只需要移除!IsPostBack
条件即可。 欲了解更多详情,请查看this。