可以正常运行,却无法实现编辑功能的代码~~~~请帮忙看看`~谢谢~
我修改了dal_updatecmd (修改数据功能代码) 之后,代码可以正常运行,编译,显示页面.但是选择一行数据修改后,点击"修改"却无法修改数据.而且没有出错提示.本来是正常的,但我在sql语句中使用了参数之后就无法正常编辑信息了,而且没有出错提示.我使用的是Access数据库.需要测试代码数据库的长老请留下邮箱~~~
我已经问过很多大师,都无法解释这一超自然现象.麻烦各位长老帮我看看~~~谢谢 鞠躬~~~
这是程序代码段
<%@ Page Language="VB" Debug ="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><script runat="server">Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not IsPostBack Then
binddatalist()
End If
End Sub
Sub binddatalist()
Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
Dim cmd As Data.OleDb.OleDbCommand = New Data.OleDb.OleDbCommand("select * from shop_sale", myconn)
myconn.Open()
Dim mydatareader As Data.OleDb.OleDbDataReader = cmd.ExecuteReader()
DataList1.DataSource = mydatareader
DataList1.DataBind()
mydatareader.Close()
myconn.Close()
End SubSub dal_editcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)
DataList1.EditItemIndex = e.Item.ItemIndex
binddatalist()
End SubSub dal_cancelcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)
DataList1.EditItemIndex = -1
binddatalist()
End SubSub dal_delcmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
Dim saleid As String = DataList1.DataKeys(e.Item.ItemIndex)
Dim cmd As Data.OleDb.OleDbCommand = New Data.OleDb.OleDbCommand("delete * from shop_sale where numsal_saleid=" + saleid, myconn)
myconn.Open()
cmd.ExecuteNonQuery()
myconn.Close()
DataList1.EditItemIndex = -1
binddatalist()End SubSub dal_updatecmd(ByVal s As Object, ByVal e As DataListCommandEventArgs)Dim saleid As String
dim sname As TextBox= e.Item.FindControl("sname")
dim sclass As TextBox= e.Item.FindControl("sclass")
Dim stype As TextBox= e.Item.FindControl("stype")
Dim soffer As TextBox= e.Item.FindControl("soffer")
Dim ssoffer As TextBox= e.Item.FindControl("ssoffer")
Dim samount As TextBox= e.Item.FindControl("samount")
Dim sleft As TextBox= e.Item.FindControl("sleft")
Dim sintro As TextBox= e.Item.FindControl("sintro")
Dim sphoto As TextBox= e.Item.FindControl("sphoto")
Dim sreview As TextBox= e.Item.FindControl("sreview")
saleid = DataList1.DataKeys(e.Item.ItemIndex)
Dim connstr As String = "Provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db1.mdb")
Dim myconn As Data.OleDb.OleDbConnection = New Data.OleDb.OleDbConnection(connstr)
dim cmdstr as string = "update shop_sale set txtsal_name=@sname,txtsal_class=@sclass,txtsal_type=@stype,monsal_offer=@soffer,monsal_soffer=@ssoffer,numsal_amount=@samount,numsal_left=@sleft,remsal_intro=@sintro,remsal_review=@sreview,httsal_photo=@sphoto where numsal_saleid=@sid"
Dim updatecmd As Data.OleDb.OleDbCommand
updatecmd = New Data.OleDb.OleDbCommand ( cmdstr,myconn )
updatecmd.Parameters.Add("@sid", Data.OleDb.OleDbType.Char).Value = saleid
updatecmd.Parameters.Add("@sname", Data.OleDb.OleDbType.Char).Value = sname.Text
updatecmd.Parameters.Add("@stype", Data.OleDb.OleDbType.Char).Value = stype.Text
updatecmd.Parameters.Add("@sclass", Data.OleDb.OleDbType.Char).Value = sclass.Text
updatecmd.Parameters.Add("@soffer", Data.OleDb.OleDbType.Char).Value = soffer.Text
updatecmd.Parameters.Add("@ssoffer", Data.OleDb.OleDbType.Char).Value = ssoffer.Text
updatecmd.Parameters.Add("@samount", Data.OleDb.OleDbType.Char).Value = samount.Text
updatecmd.Parameters.Add("@sleft", Data.OleDb.OleDbType.Char).Value = sleft.Text
updatecmd.Parameters.Add("@sintro", Data.OleDb.OleDbType.Char).Value = sintro.Text
updatecmd.Parameters.Add("@sphoto", Data.OleDb.OleDbType.Char).Value = sphoto.Text
updatecmd.Parameters.Add("@sreview", Data.OleDb.OleDbType.Char).Value = sreview.Textmyconn.Open()
updatecmd.ExecuteNonQuery()
myconn.Close()
DataList1.EditItemIndex = -1
binddatalist()End Sub</script>

解决方案 »

  1.   

    接上,这是html 代码段
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>Untitled Page</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
     <asp:Label ID=lab_wrong runat=server></asp:Label><asp:DataList ID="DataList1" CellPadding="4" ForeColor="#333333" DataKeyField="numsal_saleid" OnEditCommand="dal_editcmd"
    OnDeleteCommand ="dal_delcmd" OnCancelCommand ="dal_cancelcmd" OnUpdateCommand ="dal_updatecmd" EditItemStyle-BackColor="DeepSkyBlue" runat=server>
    <ItemTemplate >
    商品ID <%#Container.DataItem("numsal_saleid")%> <br /> 
    商品名称 <%#Container.DataItem("txtsal_name")%> <br />
    <asp:LinkButton ID =edit1 runat =server Text ="编辑商品资料" CommandName ="edit"></asp:LinkButton>
    </ItemTemplate>
     
    <EditItemTemplate >商品名称 <asp:TextBox ID=sname runat =server Text='<%#container.dataitem("txtsal_name")%> ' ></asp:TextBox><br />
    品牌     <asp:TextBox ID=stype runat =server Text='<%#container.dataitem("txtsal_type")%>' ></asp:TextBox><br />
    类别     <asp:TextBox ID=sclass runat=server Text='<%#container.dataitem("txtsal_class")%> '></asp:TextBox><br />
    定价     <asp:TextBox ID=soffer runat =server Text='<%#container.dataitem("monsal_offer")%> ' ></asp:TextBox><br />
    特价     <asp:TextBox ID=ssoffer runat =server Text='<%#container.dataitem("monsal_soffer")%>' ></asp:TextBox><br />
    入货数量 <asp:TextBox ID=samount runat=server Text='<%#container.dataitem("numsal_amount")%> '></asp:TextBox><br />
    剩下     <asp:TextBox ID=sleft runat =server Text='<%#container.dataitem("numsal_left")%> ' ></asp:TextBox><br />
    商品介绍 <asp:TextBox ID=sintro runat =server Text='<%#container.dataitem("remsal_intro")%>' ></asp:TextBox><br />
    图片     <asp:TextBox ID=sphoto runat=server Text='<%#container.dataitem("httsal_photo")%> '></asp:TextBox><br />
    用户评价 <asp:TextBox ID=sreview runat =server Text='<%#container.dataitem("remsal_review")%> ' TextMode=MultiLine ></asp:TextBox><br /><asp:LinkButton ID=linb_update CommandName ="update" Text ="修改" runat =server></asp:LinkButton>
    <asp:LinkButton ID=linb_del CommandName ="delete" Text="删除" runat =server ></asp:LinkButton>
    <asp:LinkButton ID=linb_cancel CommandName ="cancel" Text ="取消" runat=server ></asp:LinkButton></EditItemTemplate><FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    <AlternatingItemStyle BackColor="GhostWhite" />
    <ItemStyle BackColor="#EFF3FB" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    </asp:DataList></div>
    </form>
    </body>
    </html>
      

  2.   

    很奇怪啊,你上面这样的写法居然能通过?
    dim sname As TextBox= e.Item.FindControl("sname")应为如下:
    dim sname As TextBox= Ctype(e.Item.FindControl("sname"),TextBox)检查你的事件有没有丢失.
      

  3.   

    <ASP.NET 技术内幕>里就是这种写法的啊,我以前用过没事啊.无毒副作用~~常用还可以强身健体~~dim sname As TextBox= e.Item.FindControl("sname")
      

  4.   

    C#:TextBox sname=(TextBox)e.Item.FindControl["sname"];//FindControl方法返回的是object对象,要转化一下的
      

  5.   

    给你一个现成的:VB.NET版(.VB文件)
    --------------------------------------------------------------
    Imports System.Data
    Imports System.Data.SqlClient
    Public Class WebForm1
        Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
        Protected WithEvents Repeater1 As System.Web.UI.WebControls.Repeater    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region    Public Sub bindGrid(ByVal s As String)
            Dim sqlConn As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
            Dim ds As New DataSet
            Dim dt As DataTable
            Dim dv As DataView
            sqlConn.Open()
            Dim sqlAdapter As New SqlDataAdapter("select * from student", sqlConn)
            sqlAdapter.Fill(ds, "tabStudent")
            dt = ds.Tables("tabStudent")
            dv = New DataView(dt)
            dv.Sort = s
            Me.DataGrid1.DataSource = dv
            Me.DataGrid1.DataBind()
            sqlConn.Close()
            sqlConn = Nothing
        End Sub    Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            If Not Page.IsPostBack Then
                bindGrid("")
            End If
        End Sub    '实现翻页
        Public Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
            Me.DataGrid1.CurrentPageIndex = e.NewPageIndex
            bindGrid("")
        End Sub    '编辑
        Public Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
            Me.DataGrid1.EditItemIndex = e.Item.ItemIndex
            bindGrid("")
        End Sub    '取消编辑
        Public Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
            Me.DataGrid1.EditItemIndex = -1
            bindGrid("")
        End Sub    '更新数据
        Public Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
            Dim strId, strSql, address As String
            Dim age As Integer
            Dim intRow As Integer
            Dim obj1, obj2 As TextBox
            intRow = e.Item.ItemIndex
            obj1 = Me.DataGrid1.Items(intRow).Cells(3).Controls(0)
            obj2 = Me.DataGrid1.Items(intRow).Cells(2).Controls(0)
            address = obj1.Text
            age = CInt(obj2.Text)
            strId = Me.DataGrid1.DataKeys.Item(intRow)
            strSql = "update student set address='" & address & "',age='" & age & "' where studentid='" & strId & "'"
            Dim sqlCon As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
            sqlCon.Open()
            Dim sqlCmd As New SqlCommand
            sqlCmd.CommandText = strSql
            sqlCmd.Connection = sqlCon
            sqlCmd.ExecuteNonQuery()
            sqlCon.Close()
            sqlCon = Nothing
            Me.DataGrid1.EditItemIndex = -1
            bindGrid("")
        End Sub    '删除数据
        Public Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand
            Dim stuId, sqlStr As String
            Dim currentRow As Integer
            currentRow = e.Item.ItemIndex
            stuId = Me.DataGrid1.DataKeys.Item(currentRow)
            sqlStr = "delete from student where studentid='" & stuId & "'"
            Dim sqlCon As New SqlConnection("server=ZENGXI2005;uid=sa;pwd=68597792;database=chapter8")
            sqlCon.Open()
            Dim sqlCmd As New SqlCommand
            sqlCmd.CommandText = sqlStr
            sqlCmd.Connection = sqlCon
            sqlCmd.ExecuteNonQuery()
            sqlCon.Close()
            sqlCon = Nothing
            Me.DataGrid1.EditItemIndex = -1
            bindGrid("")
        End Sub    '进行排序
        Public Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DataGrid1.SortCommand
            Dim title As String
            title = e.SortExpression.ToString
            bindGrid(title)
        End Sub
    End Class
      

  6.   

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="editGrid.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 80px; POSITION: absolute; TOP: 56px" runat="server"
    Width="768px" Height="240px" AllowPaging="True" AutoGenerateColumns="False" BorderColor="#0099CC"
    BorderWidth="2px" CellPadding="2" AllowSorting="True" PageSize="3" OnPageIndexChanged="DataGrid1_PageIndexChanged"
    OnUpdateCommand="DataGrid1_UpdateCommand" OnCancelCommand="DataGrid1_CancelCommand" OnEditCommand="DataGrid1_EditCommand"
    OnDeleteCommand="DataGrid1_DeleteCommand" OnSortCommand="DataGrid1_SortCommand" DataKeyField="studentid">
    <AlternatingItemStyle HorizontalAlign="Center" BackColor="#99CCFF"></AlternatingItemStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <HeaderStyle HorizontalAlign="Center" BackColor="LightSteelBlue"></HeaderStyle>
    <Columns>
    <asp:BoundColumn DataField="studentid" SortExpression="studentid" ReadOnly="True" HeaderText="学  号"></asp:BoundColumn>
    <asp:BoundColumn DataField="name" SortExpression="name" ReadOnly="True" HeaderText="姓  名"></asp:BoundColumn>
    <asp:BoundColumn DataField="age" SortExpression="age" HeaderText="年  龄"></asp:BoundColumn>
    <asp:BoundColumn DataField="address" SortExpression="address" HeaderText="地  址"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="照  片">
    <ItemTemplate>
    <asp:Image ID="photoImg" Runat="server" ImageUrl='<%#Container.dataItem("photo")%>'>
    </asp:Image>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="操  作" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    <asp:ButtonColumn Text="删除" ButtonType="PushButton" HeaderText="删  除" CommandName="Delete"></asp:ButtonColumn>
    </Columns>
    <PagerStyle NextPageText="下一页" Font-Italic="True" PrevPageText="上一页" HorizontalAlign="Center"
    ForeColor="Blue" BackColor="White"></PagerStyle>
    </asp:datagrid></form>
    </body>
    </HTML>-------------------------------------------------------------------------------
    数据库就自己建了,就那么几个字段,适当修改数据库的连接字符串就可以运行的
      

  7.   

    哦~~~谢谢楼上各位长老~~~
    小生已经找到问题症结所在.看这一段dim cmdstr as string = "update shop_sale set txtsal_name=@sname,txtsal_class=@sclass,txtsal_type=@stype,monsal_offer=@soffer,monsal_soffer=@ssoffer,numsal_amount=@samount,numsal_left=@sleft,remsal_intro=@sintro,remsal_review=@sreview,httsal_photo=@sphoto where numsal_saleid=@sid"@sid 是saleid的参数
    我把where numsal_saleid=@sid"  改成 where numsal_saleid="+saleid 这样就行了 
    不使用 @sid 参数传递值而直接用saleid就正常了.
    不过我还是不知道为什么不能用@sid这个参数.请教各位长老`~~~~
      

  8.   

    @sid 是在 数据库里用的 
      在 .net 里 传值 就该用 '"+参数名+"' C# 的写法 
      

  9.   

    updatecmd.Parameters.Add("@sid", Data.OleDb.OleDbType.Char).Value=.....长度是多少?