点击"修改"按扭,就将文本框TxtPRI中的数据存入到数据库中的字段pri(int型),源代码如下:private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int ID=Convert.ToInt32(e.Item.Cells[0].Text); string PRI=((TextBox)e.Item.FindControl("TxtPRI")).ToString(); if (PRI=="")
{
Response.Write("<script>alert('优先级不能为空!');</script>");
}
else
{
this.UpDatainfoPRI(ID,int.Parse(PRI.Trim()));
}
DataGrid1.EditItemIndex=-1;
this.databing();
}

解决方案 »

  1.   

    下面是调用的修改数据库过程:
    public void UpDatainfoPRI(int id,int PRI)
    {
    string StrSql;
    StrSql="Update news_content set PRI='"+PRI+"' where ID='"+id+"'";
    try
    {
    this.con.ExcuteTable(StrSql);
    }
    catch(System.Data.SqlClient.SqlException e)
    {
    throw new Exception(e.Message);
    }
    }
      

  2.   

    “/reg”应用程序中的服务器错误。
    --------------------------------------------------------------------------------输入字符串的格式不正确。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 
    行 166: else
    行 167: {
    行 168: this.UpDatainfoPRI(ID,int.Parse(PRI.Trim()));
    行 169: }
    行 170: DataGrid1.EditItemIndex=-1;
     
    //错误提示为 168行出错!输入字符串的格式不对!
      

  3.   

    StrSql="Update news_content set PRI='"+PRI+"' where ID='"+id+"'";改为StrSql="Update news_content set PRI=" & PRI &" where ID=" & id 
      

  4.   

    StrSql="Update news_content set PRI="+PRI+" where ID="+id+"";
                                        -------          -------去掉单引号
    这样应该可以了
      

  5.   

    miaojx(I'll be back),谢谢!我试了你的方法,提示出错信息:
    D:\reg\News\Editnews_hs.aspx.cs(109): 运算符“&”无法应用于“string”和“int”类型的操作数
      

  6.   

    fphuang(笨牛@net) ,谢谢你的建议,我试了一下,错误依然存在!
    异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 
    行 166: else
    行 167: {
    行 168: this.UpDatainfoPRI(ID,int.Parse(PRI.Trim()));
    行 169: }
    行 170: DataGrid1.EditItemIndex=-1;
     源文件: d:\reg\news\editnews_hs.aspx.cs    行: 168 
      

  7.   

    楼上的几位怎么都认为是sql语句的问题了?
    如果pri、id是字符串类型那么它这样写也没错误。
    其次你单步跟踪下具体运行到你UpDatainfoPRI()里面哪个语句有错误,并且提取下sql语句到数据库的sql执行工具里面测试执行下
      

  8.   

    或者你直接用convert。toint32来转换了?
      

  9.   

    StrSql="Update news_content set PRI='"+PRI+"' where ID='"+id+"'";改为
    StrSql="Update news_content set PRI='"+PRI+"' where ID="+id;
      

  10.   

    int ID=Convert.ToInt32(e.Item.Cells[0].Text); string PRI=((TextBox)e.Item.FindControl("TxtPRI")).Text;//严重注意这个地方 if (PRI=="")
    {
    Response.Write("<script>alert('优先级不能为空!');</script>");
    }
    else
    {
    this.UpDatainfoPRI(ID,int.Parse(PRI.Trim()));
    }
    DataGrid1.EditItemIndex=-1;
    this.databing();
    你取到的是TextBOx,而非其值
      

  11.   

    楼上的你看到没有后面还有个text!!!
      

  12.   

    Update news_content set PRI='"+PRI+"' where ID='"+id+"'";又不是 varchar,nvarchar 加什么引号啊,把引号去掉
      

  13.   

    jimu8130(yang),谢谢你的建议!
    我根据你的想法单步执行,发现:PRI="System.Web.UI.WebControls.TextBox",没有获得一个数值!
    是:string PRI=((TextBox)e.Item.FindControl("TxtPRI")).ToString();这句发生了错误,
    我按照heatwin() 说的改为:string PRI=((TextBox)e.Item.FindControl("TxtPRI")).Text;却发现PRI值为空!这又是为什么?该怎么改呢?继续求助!
      

  14.   

    改称这样吧((TextBox)e.Item.cells[pri行的序列数].findcontrol[]).text
      

  15.   

    jimu8130(yang) ,谢谢你!
    我按你的办法试了一下,跟踪PRI的值也为空!
      

  16.   

    我先后多次调试发现:
    TextBox PRI=(TextBox)e.Item.FindControl("TxtPRI");
    得不到DataGrid中TextBox框中填入的值,怎么得到DataGrid中文本框的值呢?
      

  17.   

    TextBox PRI=(TextBox)e.Item.FindControl("TxtPRI");PRI.Text就是需要的值
      

  18.   

    int ID=Convert.ToInt32(e.Item.Cells[0].Text);TextBox PRI=(TextBox)e.Item.FindControl("TxtPRI");
    if (PRI=="")
    {
    Response.Write("<script>alert('优先级不能为空!');</script>");
    }
    else
    {
    this.UpDatainfoPRI(ID,int.Parse(PRI.Trim())); //调用修改函数,修改数据库中的值
    }
    DataGrid1.EditItemIndex=-1;
    this.databing();//重新绑定数据
      

  19.   

    我上面所说的都能取到该textbox值,要么就是你的前台代码有冲突/
      

  20.   

    最后查出来,原因是:DataGrid1绑定函数写在了:if(!IsPostBack){}的外面。谢谢各位了!