首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态复选框事件处理程序asp.net

动态复选框事件处理程序asp.net
EN

Stack Overflow用户
提问于 2012-10-30 05:31:27
回答 2查看 2K关注 0票数 0

我发现了一些与此相关的问题,但没有一个问题能解决我的问题。无论如何,我有一个ASP网页表单,从数据库中提取问题和答案,并将它们放在一个表中。在该表中,我有一个带有复选框的列,用户可以在其中标记问题。我的问题是CheckChanged事件的事件处理程序没有触发。我读过一些关于回发之类的东西,但我的问题是,这些控件直到按下检索问题按钮后才会创建。任何帮助或指点都会很棒。

谢谢,

约瑟夫

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ScienceAssessmentToolASP
{
public partial class createnewtest : System.Web.UI.Page
{
    private int n;
    private SqlConnection conn = null;
    private List<int> flaggedQuestions = new List<int>();

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            GetConn();
            ExecuteRetrieval();
            n = 1;
        }
        catch (Exception ex) { n = 0; Response.Write("for debugging: " + ex); }
        finally { if (conn != null) conn.Close(); }
        if (n < 0)
            //Label1.Text = "Connection Successful";
            Label3.Text = "Failed to Connect to Database, please contact the administrator.";           
    }
    private void GetConn()
    {
        string connString = @"
            removed ";

        conn = new SqlConnection(connString);
        conn.Open();
    }

    private void ExecuteRetrieval()
    {
        List<string> names = new List<string>(),
          types = new List<string>();
        SqlDataReader reader = null;

         string query = "select * from [ScienceQA] where [GradeLevel] = " + DropDownList1.Text +
            " and [Topic] = '" + DropDownList2.Text + "';";

        SqlCommand cmd = new SqlCommand(query, conn);

        reader = cmd.ExecuteReader();

        TableHeaderRow headerRow = new TableHeaderRow();
        TableHeaderCell idH = new TableHeaderCell();
        TableHeaderCell questionH = new TableHeaderCell();
        TableHeaderCell answerH = new TableHeaderCell();
        TableHeaderCell flagH = new TableHeaderCell();

        idH.Text = "ID";
        questionH.Text = "Question";
        answerH.Text = "Answer";
        flagH.Text = "Flag";

        headerRow.Cells.Add(idH);
        headerRow.Cells.Add(questionH);
        headerRow.Cells.Add(answerH);
        headerRow.Cells.Add(flagH);
        resultTable.Controls.Add(headerRow);

        while (reader.Read())
        {
            TableRow row = new TableRow();
            TableCell idCell = new TableCell();
            TableCell qCell = new TableCell();
            TableCell aCell = new TableCell();
            TableCell flag = new TableCell();

            idCell.Text = reader[0].ToString();
            qCell.Text = reader[1].ToString();
            aCell.Text = reader[2].ToString();

            CheckBox flagBox = new CheckBox();
            flagBox.ID = "flag" + idCell.Text.ToString();
            //flagBox.Text = "Flag";
            flagBox.CheckedChanged += new System.EventHandler(flagButton_Click);
            flag.Controls.Add(flagBox);

            row.Cells.Add(idCell);
            row.Cells.Add(qCell);
            row.Cells.Add(aCell);
            row.Cells.Add(flag);
            resultTable.Controls.Add(row);          
        }

        Label4.Visible = true;
        flagCounter.Visible = true;
        resultTable.Visible = true;
    }
    protected void flagButton_Click(object sender, EventArgs e) 
    {
        CheckBox lb = (CheckBox)sender;
        int questionID = Convert.ToInt32(lb.Text.Substring(4));

        if (lb.Checked)
        {
            lb.Checked = false;
            flaggedQuestions.Add(questionID);
            flagCounter.Text = Convert.ToString(Convert.ToInt32(flagCounter.Text) - 1);
        }
        else
        {
            lb.Checked = true;
            flaggedQuestions.Remove(questionID); 
            flagCounter.Text = Convert.ToString(Convert.ToInt32(flagCounter.Text) + 1);
        }          
    }
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-31 03:17:39

我想通了。我想我不需要按钮处理程序中的任何东西,因为点击按钮会导致回发。所以我用if(回发)检查把所有的button1处理程序放到了我的页面加载中,这起作用了。

票数 0
EN

Stack Overflow用户

发布于 2012-10-30 05:37:25

尝试在创建控件时将AutoPostBack设置为true:

代码语言:javascript
复制
flagBox.AutoPostBack = true;

这使得该事件将导致回发。如果您没有这样的代码,那么只有在您提交表单之后,代码才会触发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13129978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档