• 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);
    }

  • 相关阅读:
    [Codeforces Round #617 (Div. 3)] 题解 A,B,C,D,E1,E2,F
    [Codeforces Round #611 (Div. 3)] C. Friends and Gifts (随机大法好)
    [Hello 2020] D. New Year and Conference (ST表,排序)
    [Hello 2020] C. New Year and Permutation (组合数学)
    Codeforces Beta Round #7 C. Line (扩展欧几里德)
    扩展欧几里德
    Codeforces Round #349 (Div. 2) D. World Tour (最短路)
    HDU 4052 Adding New Machine (线段树+离散化)
    HDU 3265 Posters (线段树+扫描线)(面积并)
    HDU 1828 Picture (线段树+扫描线)(周长并)
  • 原文地址:https://www.cnblogs.com/noahsky/p/1114635.html
Copyright © 2020-2023  润新知