说明:我用的数据源是Access数据源控件,而后我又在Gridview控件中加入ButtonField字段加入按钮,为了更新Gridview控件中的时间字段,而这个时间是当前的日期时间,没有涉及到编辑。在应用中,更新别的字段好用,而更新时间不起做用,也不提示错误,不知为什么:
代码如下:
后台的:
Protected Sub GridView2_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView2.RowCommand
If e.CommandName = "Update" Then
Dim cn As New OleDbConnection(yjClass.DbPath1)
Dim str As String = "Update info set fbTime=@d where id=" & e.CommandArgument.ToString
Dim cmd As New OleDbCommand(str, cn)
cmd.Parameters.Add("@d", OleDbType.Date)
cmd.Parameters("@d").Value = Date.Now
Try
cn.Open()
cmd.ExecuteNonQuery()
Finally
cn.Close()
End Try
End If
End Sube.CommandArgument.ToString 是按钮绑定的Id字段。
前台代码:<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="Id" DataSourceID="AccessDataSource1" Width="580px" BorderStyle="None" BorderWidth="0px" CellPadding="4" CellSpacing="2" >
<Columns>
<asp:TemplateField></asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True"
SortExpression="Id" />
<asp:TemplateField HeaderText="信息标题">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("id", "DisplayInfo.aspx?infoid={0}") %>'
Text='<%# Eval("infobt") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="发布时间">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("fbtime") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("fbtime") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FbMan" SortExpression="FbMan" Visible="False" />
<asp:TemplateField HeaderText="更新" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandArgument='<%# Eval("id") %>'
CommandName="Update" Text="更新" ></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<HeaderStyle BackColor="#FFC0C0" />
<EmptyDataTemplate>
<asp:Label ID="Label3" runat="server" Font-Size="12px" ForeColor="#FF8080" Text="您还没有信息发布!!"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/#yjData%.mdb"
        SelectCommand="SELECT [Id],[fbTime], [infoBt], [FbMan] FROM [info] WHERE ([FbMan] = ?)" DeleteCommand="DELETE FROM [info] WHERE [Id] = ?" UpdateCommand="UPDATE [info] SET [fbTime] = ? WHERE [Id] = ?">
        <SelectParameters>
            <asp:CookieParameter CookieName="yj_userid" Name="FbMan" Type="String" />
        </SelectParameters>
        <DeleteParameters>
            <asp:Parameter Name="Id" Type="Int32" />
        </DeleteParameters>        
    </asp:AccessDataSource>   请高手指点!!在线等

解决方案 »

  1.   

    >>>>Dim str As String = "Update info set fbTime=? where id=" & e.CommandArgument.ToString
    ' OleDb 不支持命名参数,请使用占位符 ?
      

  2.   

    If e.CommandName = "Update" Then
    Dim cn As New OleDbConnection(yjClass.DbPath1)
    Dim str As String = "Update info set fbTime=@d where id=" & e.CommandArgument.ToString
    Dim cmd As New OleDbCommand(str, cn)
    cmd.Parameters.Add("@d", OleDbType.Date)
    cmd.Parameters("@d").Value = Date.Now
    Try
    cn.Open()
    cmd.ExecuteNonQuery()
    Finally
    cn.Close()
    这个是我加按钮后运行的代码
      

  3.   

    你的id在数据库里什么字段?如果是字符类型Dim str As String = "Update info set fbTime=@d where id=" & e.CommandArgument.ToString
    应该改成
    Dim str As String = "Update info set fbTime=@d where id='" & e.CommandArgument & "'"如果是整数类型
    Dim str As String = "Update info set fbTime=@d where id=" & e.CommandArgument.ToString
    应该改成
    Dim str As String = "Update info set fbTime=@d where id=" & Convert.ToInt32(e.CommandArgument)
      

  4.   

    id 是自动生成的
    我改过字符串试不行的,
    如果我把,fbtime=@d 改成, 别的字段加参数按钮就起作
      

  5.   

    自动生成的就是整数类型最好单步调试看看e.CommandArgument得到的值是否正确
      

  6.   

    e.commandArgument正确的 换成infobt=@bt 就可以更新标题值,
    而发布时间fbtime=@d点击按钮就不更新,也不提示错误,
      

  7.   

    我的网站是www.Lsyjxx.cn 注册一下就可以看到,发一条信息