我在GridView中放入几个CheckBox,在更改时,总是提示异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。代码如下:: protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int Rid = Convert.ToInt32(((Label)GridView1.Rows[e.RowIndex].Cells[11].FindControl("lblRid")).Text);
        string Rname = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].FindControl("txtRname")).Text;
        CheckBox OrderSend = (CheckBox)GridView1.Rows[e.RowIndex].Cells[2].FindControl("chkOrderSend");
        //CheckBox Production = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[3].FindControl("chkProduction")).Checked;
        //CheckBox Product = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[4].FindControl("chkProduct")).Checked;
        //CheckBox Material = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[5].FindControl("chkMaterial")).Checked;
        //CheckBox Client = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[6].FindControl("chkClient")).Checked;
        //CheckBox Provider = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[7].FindControl("chkProvider")).Checked;
        //CheckBox Employee = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[8].FindControl("chkEmployee")).Checked;
        //CheckBox Finance = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[9].FindControl("chkFinance")).Checked;
        //CheckBox User = ((CheckBox)GridView1.Rows[e.RowIndex].Cells[10].FindControl("chkUser")).Checked;
        bool updateok;
        //updateok = Convert.ToBoolean(DataOption.Option("update [Role] set [Rname]='" + Rname + "',[OrderSend]='" + OrderSend + "' ,[Production]='" + Production + "',[Product]='" + Product + "',[Material]='" + Material + "',[Client]='" + Client + "',[Provider]='" + Provider + "',[Employee]='" + Employee + "',[Finance]='" + Finance + "',[User]='" + User + "' where Rid=" + Rid));
        updateok = Convert.ToBoolean(DataOption.Option("update [Role] set [Rname]='" + Rname + "',OrderSend='" + OrderSend.Checked + "' where Rid=" + Rid));
        if (updateok == true)
        {
            GridView1.EditIndex = -1;
            DataOption.Dispose();
            this.BindToGridView();
          
        }    }
我用bool代替checkbox也不行!当注释所在checkbox我就可以更新!???
我要如何做才好??????

解决方案 »

  1.   

    ((CheckBox)GridView1.Rows[e.RowIndex].Cells[3].FindControl("chkProduction")).Checked;去掉Cells限止,直接:
    ((CheckBox)GridView1.Rows[e.RowIndex].FindControl("chkProduction")).Checked;
    试一下。
      

  2.   

    还是不可以啊!!!我用的是ACCESS数据库,数据类型为是/否!!
      

  3.   

    改成这样试试:
    updateok = "update [Role] set [Rname]='" + Rname + "',OrderSend=" + OrderSend.Checked?"-1":"0" + " where Rid=" + Rid;
      

  4.   

    数据库字段类型的问题吧,你直接写一条SQL语句试一下啊
      

  5.   

    我想用ACCESS的是否数据类型啊!但一用它就说标准表达式中数据类型不匹配。我如果用datasource就可以更新!但我不想用啊
      

  6.   

    protected void btAddRole_Click(object sender, EventArgs e)
        {
            if (this.IsValid)
            { 
                string name =DataOption.FunStr(Rname.Text);
                if (name == "" || name == null||name=="无")
                {
                    Response.Write("<script language='javascript'>alert('不能为空!');history.go(-1);</script>");
                    Response.End();
                }
                bool OrderSend = chkOrderSend.Checked;
                bool Production=chkProduction.Checked;
                bool Product=chkProduct.Checked;
                bool Material=chkMaterial.Checked;
                bool Client = chkClient.Checked;
                bool Provider=chkProvider.Checked;
                bool Employee = chkEmployee.Checked;
                bool Finance = chkFinance.Checked;
                bool User=chkUser.Checked;
                bool InsertOK;
                //string Sql = "insert into Role(Rname) values('" + name + "')";
                string Sql = "insert into Role(Rname,OrderSend) values('" + name + "','" + OrderSend + "')";
                InsertOK = DataOption.Option(Sql);
                if (InsertOK == true)
                {
                    Response.Write("<script language='javascript'>alert('成功添加!');window.location.href='RoleManager.aspx'</script>"); 
                }
                DataOption.Dispose();        }    }
    同样我在添加时也说标准表达式中数据类型不匹配。是否型数据怎样用?
      

  7.   

    哎,又一个没仔细看我代码的。
    是/否型字段在SQL语句两边不要加单引号。
    改成这样:
    string Sql = "insert into Role(Rname,OrderSend) values('" + name + "'," + OrderSend + ")";
      

  8.   

    是/否型字段在SQL语句两边不要加单引号。谢谢!只要不要单引号就OK!
      

  9.   

    更新也同样是双引号就可以了!
    updateok = "update [Role] set [Rname]='" + Rname + "',OrderSend=" + OrderSend.Checked+" + " where Rid=" + Rid;我看了看,怎么少一个单引号??以后看贴可要更认真