Sub UpdateInfo(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
        Dim conn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(ConfigurationSettings.AppSettings("LawConnStr"))
        Dim TextBox1 As TextBox
        Dim TextBox2 As TextBox
        Dim TextBox3 As TextBox
        Dim TextBox4 As TextBox
        Dim myKeyid As Integer = DataGrid1.DataKeys(e.Item.ItemIndex)
        Dim cc As String = myKeyid
        TextBox1 = e.Item.Cells(2).Controls(0)
        TextBox2 = e.Item.Cells(3).Controls(0)
        TextBox3 = e.Item.Cells(4).Controls(0)
        TextBox4 = e.Item.Cells(5).Controls(0)
        Dim sql As String = "Update pic set pic1=@pic1,pic2=@pic2,pic3=@pic3,lei=@lei where id='" & cc & "'"
        Dim Cmd As New System.Data.OleDb.OleDbCommand(sql, conn)
        Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic1", System.Data.OleDb.OleDbType.VarChar, Nothing))
        Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic2", System.Data.OleDb.OleDbType.VarChar, Nothing))
        Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic3", System.Data.OleDb.OleDbType.VarChar, Nothing))
        Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@lei", System.Data.OleDb.OleDbType.VarChar, Nothing))
        Cmd.Parameters("@pic1").Value = TextBox1.Text
        Cmd.Parameters("@pic2").Value = TextBox2.Text
        Cmd.Parameters("@pic3").Value = TextBox3.Text
        Cmd.Parameters("@lei").Value = TextBox4.Text
        conn.Open()
        Cmd.ExecuteNonQuery()
        conn.Close()
        DataGrid1.EditItemIndex = -1
        BindGrid()
    End Sub异常详细信息: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。源错误: 行 85:         Cmd.Parameters("@lei").Value = TextBox4.Text
行 86:         conn.Open()
行 87:         Cmd.ExecuteNonQuery()
行 88:         conn.Close()
行 89:         DataGrid1.EditItemIndex = -1
 
源文件: D:\website\xmbao\admin.aspx.vb    行: 87 堆栈跟踪: [OleDbException (0x80040e07): 标准表达式中数据类型不匹配。]
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) +41
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +174
   System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +92
   System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +65
   System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +112
   System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +66
   xmbao.admin.UpdateInfo(Object sender, DataGridCommandEventArgs e) in D:\website\xmbao\admin.aspx.vb:87
   System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArgs e) +109
   System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e) +507
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e) +106
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
   System.Web.UI.Page.ProcessRequestMain() +1277这个错误怎么解决啊?   请高手帮我改一下啊,谢谢!!

解决方案 »

  1.   

    查看你pic 表的四个字段类型是否都是varchar
      

  2.   

    数据类型不匹配,看看定义的哪个参数的类型和数据库中不一制。
    Dim sql As String = "Update pic set pic1=@pic1,pic2=@pic2,pic3=@pic3,lei=@lei where id='" & cc & "'"
    你的数据库中id是字符类型的吗?
      

  3.   

    access的id是'自动编号', 其它的都是'文本'
      

  4.   

    Dim sql As String = "Update pic set pic1=@pic1,pic2=@pic2,pic3=@pic3,lei=@lei where id='" & cc & "'"错误,你的 id 是数值型的还加引号做什么?Dim sql As String = "Update pic set pic1=@pic1,pic2=@pic2,pic3=@pic3,lei=@lei where id=" & cc
      

  5.   

    to csdnzm(明飞):谢谢你!   问题解决了,  那个textbox在程序里可以定义宽吗?  我想让textbox窄一点!
      

  6.   

    怎样在.vb里定义textbox的宽啊?  谢谢!
      

  7.   

    datagrid如果不用模板列的控制不了宽度
      

  8.   

    啊,怎么这样啊,那我怎样才可以自定义datagrid里textbox的宽啊???
      

  9.   

    请问如果换成模板列,在更新时怎么把textbox加到datagrid里啊?
      

  10.   

    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:TextBox width="60px" runat="server" id="TextBox6" Text='<%# DataBinder.Eval(Container.DataItem,"txt3")%>'>
    </asp:TextBox>
    </ItemTemplate>
      

  11.   

    更新时怎么用这个TextBox6啊?
      

  12.   

    怎样在.vb里定义textbox的宽啊?  谢谢!
    ------------------------
    TextBox1.Width=Unit.Pixel("宽值.")请问如果换成模板列,在更新时怎么把textbox加到datagrid里啊?
    -----------------------
    <asp:TemplateColumn HeaderText="栏目标题">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem,"Lanmu")%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox ID="LanmuTitle" Text='<%# DataBinder.Eval(Container.DataItem,"Lanmu")%>' Runat=server Width="100%" />
    </EditItemTemplate>
    </asp:TemplateColumn>引用TextBox:
    CType(e.Item.FindControl("LanmuTitle"), TextBox).Text
      

  13.   

    谢谢!  那在.vb页里更新程序要怎么写啊??
    ----------------------
    Public Sub DataGrid1_UpDate(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
    Dim updatecomm As New SqlCommand("update lanmus Set Lanmu=@lanmu where ID=" + e.Item.Cells(0).Text, conn)'更新Sql
    updatecomm.Parameters.Add("@lanmu", CType(e.Item.FindControl("LanmuTitle"), TextBox).Text.Trim.ToString())'给updatecomm参数.
    Try
    conn.Open()
    updatecomm.ExecuteNonQuery()
    Catch ex As Exception
    Throw ex
    Finally
    conn.Close()
    End Try
    DataGrid1.EditItemIndex = -1
    ShowLanmu()'重新绑定数据
    End Sub
      

  14.   

    当然,在DataGrid中要加OnUpdateCommand="DataGrid1_Update"以调用:
    Public Sub DataGrid1_UpDate(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
    'code
    End Sub
      

  15.   

    to renyu732(在学.net中...) :谢谢!   非常谢谢renyu732(在学.net中...) !!!更新时是这样写吗? Dim sql As String = "Update pic set lei=@lei where id=" & cc
    Cmd.Parameters("@lei").Value = CType(e.Item.FindControl("LanmuTitle"), TextBox).Text
      

  16.   

    datagrid如果不用模板列的控制不了宽度----------------------------------------------可以控制宽度的楼主请看这个帖子(C#的)http://community.csdn.net/Expert/topic/4084/4084141.xml?temp=.8050196
      

  17.   

    通过CType(e.Item.FindControl("LanmuTitle"), TextBox).Text可以得到DataGrid中的TextBox的Text值.得到这个值以后的操作相信你也很训练了..你完全可以这样认为:
    Dim TextBox1 as String=CType(e.Item.FindControl("LanmuTitle"), TextBox).Text.Trim.ToString()至于更新时,怎么写,那就得看你的需要了.
      

  18.   

    再次谢谢 renyu732(在学.net中...) !!!我是这样写的,没有错吧
     
    Sub UpdateInfo(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
            Dim conn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(ConfigurationSettings.AppSettings("LawConnStr"))
            Dim myKeyid As Integer = DataGrid1.DataKeys(e.Item.ItemIndex)
            Dim cc As String = myKeyid
            Dim sql As String = "Update pic set pic1=@pic1,txt1=@txt1,pic2=@pic2,txt2=@txt2,pic3=@pic3,txt3=@txt3,lei=@lei where id=" & cc
            Dim Cmd As New System.Data.OleDb.OleDbCommand(sql, conn)
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic1", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@txt1", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic2", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@txt2", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@pic3", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@txt3", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@lei", System.Data.OleDb.OleDbType.VarChar, 10))
            Cmd.Parameters("@pic1").Value = CType(e.Item.FindControl("TextBox1"), TextBox).Text
            Cmd.Parameters("@txt1").Value = CType(e.Item.FindControl("TextBox2"), TextBox).Text
            Cmd.Parameters("@pic2").Value = CType(e.Item.FindControl("TextBox3"), TextBox).Text
            Cmd.Parameters("@txt2").Value = CType(e.Item.FindControl("TextBox4"), TextBox).Text
            Cmd.Parameters("@pic3").Value = CType(e.Item.FindControl("TextBox5"), TextBox).Text
            Cmd.Parameters("@txt3").Value = CType(e.Item.FindControl("TextBox6"), TextBox).Text
            Cmd.Parameters("@lei").Value = CType(e.Item.FindControl("TextBox7"), TextBox).Text
            conn.Open()
            Cmd.ExecuteNonQuery()
            conn.Close()
            DataGrid1.EditItemIndex = -1
            BindGrid()
        End Sub
      

  19.   

    非常非常感激renyu732(在学.net中...)!!!我测试成功了,这个问题烦了我一天,现在终于解决了!  谢谢renyu732(在学.net中...)无私的帮助!!!!!!!!!!!!!!!也谢谢各位高手的无私帮助!!!
      

  20.   

    呵呵.解决就好!
    不用客气.这儿是CSDN嘛...
      

  21.   

    还是要谢谢的,呵呵,你太好了!还有最后一个问题,可以帮我吗就是dagagrid显示时,内容太长,模板列就会变得很宽,怎样固定模板列的宽,不让模板列把全部内容都显示出来.下边是我定义的模板列宽,在编辑时,textbox可以固定了,可是显示时还是不能固定,可以再帮我一下吗,谢谢!!!<asp:TemplateColumn>
    <HeaderStyle Width="80px"></HeaderStyle>
    <ItemStyle Width="80px"></ItemStyle>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem,"pic1")%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox ID="Textbox1" Text='<%# DataBinder.Eval(Container.DataItem,"pic1")%>' Runat=server Width="100%" />
    </EditItemTemplate>
    </asp:TemplateColumn>
      

  22.   

    1.你可以将内容显示一部分.就像一般的新闻,如果内容太长,则用...来表示未显示内容.
    你可以这样:
    <%# DataBinder.Eval(Container.DataItem, "title").ToString().Substring(0,20)%>
    不过你如果你的字符长度不够20会出错的。
    你可以在.cs中写啊,判断一下长度再Substring就行了。
    <%# Left(DataBinder.Eval(Container.DataItem, "title"),20)%>
      

  23.   

    2.<ItemStyle Width="100px"></ItemStyle>
    这样不成吗?
      

  24.   

    <Columns>
    <asp:TemplateColumn>
    <ItemStyle Width="100px"></ItemStyle>
    <ItemTemplate>
    <!--绑定-->
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
      

  25.   

    谢谢!用<%# Left(DataBinder.Eval(Container.DataItem, "title"),10)%>显示时正常,只显示前10个:  http://www.maoyuanchina.com/images/22.jpg但是还有个原来的问题没有解决,就是编辑时,textbox按要求也只是显示前12个,可是textbox后有空白: http://www.maoyuanchina.com/images/11.jpg