ObjectDataSource“ObjectDataSource1”未能找到带参数的非泛型方法

ObjectDataSource的使用的函数最好将变量名和数据库字段名统一,否则可能会出现错误虽然有解决办法,但没必要浪费时间去玩那个,不就是变量名吗,无所谓的啦。如果需要使用ObjectDataSource控件的更新和删除功能,一般是根据主键进行修改的,但是我在使用这个功能的时候,由于把主键这个字段设置为了readonly(主键不能更新),结果传回去的时候主键值就没有了,后来想了个办法,用cookieparam作为主键的来源,在gridview或者detailsview控件更新、删除之前(响应事件)将主键值写入cookie,感觉有点笨,不过功能没什么问题。

我发现自己真的很笨耶,晕死了。想要取回主键ID值,不用cookie那么麻烦去做,虽然可以实现功能,但肯定不好。
下面的方法应该才是正确的方法:
   指定GridView或者DetailsView的 DataKeyNames 属性,比如你的主键ID是ID,则指定DataKeyNames"ID"
在objectdatasource或者其他数据源控件指定参数,如下:

这样就可以传过去了
下面是我的一些代码:
DetailsView :
       

<yyc:SmartGridView ID="SmartGridView1" runat="server" AllowPaging="True" DataKeyNames="UserName"  DataSourceID="ObjectDataSource1" AutoGenerateColumns="False" AutoGenerateDeleteButton="True">
        <Columns>
        <asp:BoundField DataField="UserName" HeaderText="用户名" SortExpression="UserName" ReadOnly="True"/>
        <asp:BoundField DataField="Email" HeaderText="邮箱" SortExpression="Email"/>
        <asp:BoundField DataField="PasswordQuestion" HeaderText="问题" SortExpression="PasswordQuestion" />
        <asp:BoundField DataField="Comment" HeaderText="回答" SortExpression="Comment" />
        <asp:BoundField DataField="IsApproved" HeaderText="是否启用" SortExpression="IsApproved" />
        <asp:BoundField DataField="CreateDate" HeaderText="创建时间" SortExpression="CreateDate" />
        <asp:BoundField DataField="LastLoginDate" HeaderText="上次登录时间" SortExpression="LastLoginDate" />
        <asp:BoundField DataField="LastActivityDate" HeaderText="上次激活时间" SortExpression="LastActivityDate" />
        <asp:BoundField DataField="LastPasswordChangedDate" HeaderText="上次变更密码时间" SortExpression="LastPasswordChangedDate" />
        <asp:BoundField DataField="UserId" HeaderText="用户ID" SortExpression="UserId" />
        <asp:BoundField DataField="IsLockedOut" HeaderText="是否锁定" SortExpression="IsLockedOut" />
        <asp:BoundField DataField="LastLockoutDate" HeaderText="解除锁定时间" SortExpression="LastLockoutDate" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button"/>
    </Columns>
</yyc:SmartGridView>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetUsers" TypeName="UsersManager" DeleteMethod="DelUser">
       <DeleteParameters>
           <asp:Parameter Name="UserName" Type="String" />
       </DeleteParameters>
   </asp:ObjectDataSource>

业务层代码: 

[DataObjectMethod(DataObjectMethodType.Delete, true)]
public bool DelUser(string UserName)
{
    return Membership.DeleteUser(UserName);
}

转载于:https://www.cnblogs.com/noahsky/archive/2008/03/20/1114635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值