C# - 无法隐式转换类型' System.Web.UI.Control' to' System.Web.UI.WebControls.CheckBox'

时间:2016-03-20 03:41:43

标签: c# asp.net webforms

int p = 0;
int q = 0;
p = 0;
q = 0;

string username = null;
username = Session["user"];
int total = 0;
for (total = 1; total <= 120; total++) {
    CheckBox ch = new CheckBox();
    ch = Page.FindControl("C" + total);

    if (ch.Checked == true & ch.Enabled == true) {
        string query = "insert into order_master values('" + username + "','" + drpselectmovie.SelectedValue + "','" + drpselectdate.SelectedValue + "','" + drpselectshow.SelectedValue + "'," + drpselectclass.SelectedValue + ",'" + ch.ID + "'," + drpselectclass.SelectedValue + ")";
        SqlClient.SqlCommand cmd = new SqlClient.SqlCommand(query, cn);
        cmd.ExecuteNonQuery();
        ch.Enabled = false;
        if (total <= 72) {
            p = p + 1;
        } else {
            q = q + 1;

        }

    }
}
int price = 0;
price = p * 180 + q * 120;
txtprice.Text = price.ToString;
Session.Add("tickettotal", txtprice.Text);
cn.Close();

Total是一个变量,用于确定已检查checbox的复选框的编号。在其设计或.aspx代码中,我将所有复选框ID更改为C1,C2,C3等。这就是为什么&#34; C&#34;需要+ total来查找它将等于其ID。但是,我在ch = Page.FindControl(&#34; C&#34; + total)中出错。有谁知道如何解决这个问题?声明中的错误是什么?或者我忘了在代码中添加一些内容吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这是因为您尝试将父类(System.Web.UI.Control)设置为子类(System.Web.UI.WebControls.CheckBox):

ch = Page.FindControl("C" + total);

使用关键字as正确分配:

ch = Page.FindControl("C" + total) as CheckBox;

请注意,如果null不属于System.Web.UI.Control类型,您可能会获得System.Web.UI.WebControls.CheckBox

答案 1 :(得分:0)

声明“CheckBox ch = new CheckBox();”看起来很奇怪在for循环中。尝试在for循环之前声明它。我可能错了......