ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'UpdateSponsor' that has parameters:

Good morning experts,

I am having trouble updating data in a gridview..please find attached my code..I get the following error:

ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'UpdateSponsorUser' that has parameters: sname, semail, webaddress, sdesc, tel, address, original_sponsorid

I dont know where it is getting original_sponsorid ??? Please help me identify the error as I am well after my deadline, and cant do these sleepless nights much longer..
.aspx
 
<div class="content">
                                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="sponsorid"
                                    DataSourceID="ObjectDataSource1">
                                    <Columns>
                                        <asp:BoundField DataField="sname" HeaderText="sname" SortExpression="sname" />
                                        <asp:BoundField DataField="semail" HeaderText="semail" SortExpression="semail" />
                                        <asp:BoundField DataField="webaddress" HeaderText="webaddress" SortExpression="webaddress" />
                                        <asp:BoundField DataField="sdesc" HeaderText="sdesc" SortExpression="sdesc" />
                                        <asp:BoundField DataField="tel" HeaderText="tel" SortExpression="tel" />
                                        <asp:BoundField DataField="address" HeaderText="address" SortExpression="address" />
                                        <asp:CommandField ShowEditButton="True" />
                                        <asp:BoundField DataField="sponsorid" HeaderText="sponsorid" InsertVisible="False"
                                            ReadOnly="True" SortExpression="sponsorid" Visible="False" />
                                    </Columns>
                       
                                </asp:GridView>
                                <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"
                                    SelectMethod="GetSponsorByType" TypeName="sponsorsBLL" UpdateMethod="UpdateSponsorUser">
                                    <SelectParameters>
                                        <asp:SessionParameter Name="sponsorid" SessionField="user" Type="Int32" />
                                    </SelectParameters>
                                    <UpdateParameters>
                                        <asp:Parameter Name="sname" Type="String" />
                                        <asp:Parameter Name="semail" Type="String" />
                                        <asp:Parameter Name="webaddress" Type="String" />
                                        <asp:Parameter Name="sdesc" Type="String" />
                                        <asp:Parameter Name="tel" Type="String" />
                                        <asp:Parameter Name="address" Type="String" />
                                        <asp:Parameter Name="sponsorid" Type="Int32" />
                                    </UpdateParameters>
                                    
                                </asp:ObjectDataSource>
                              
                            </div>
 
sponsorBLL.cs
 
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, false)]
    public propview.sponsorsDataTable UpdateSponsorUser(string sname, string semail, string webaddress, string sdesc, string tel, string address)
    {
        return UpdateSponsorUser(sname, semail, webaddress, sdesc, tel, address);
    }

Open in new window

kasondeAsked:
Who is Participating?
 
oxyooCommented:
This would be one solution (there are always many when developing software :) )...

If you have 3 layers..
1. The UI; where Session["user"] lives
2. The Business layer; MyBusinessClass.DoAction(string user);
3. The DAL layer; MyDalClass.PerformDataAceesStuff(string user);

In this scenario, in the UI you would call MyBusinessClass.DoAction(Session["user"].ToString());
And in the Business layer, you would call DAL with MyDalClass.PerformDataAccessStuff(user);
Know you have the user details in the DAL.

There are other options as well, you might put it into the constructor.

Hope that helps.
Good Luck!
0
 
oxyooCommented:
I think the problem is that In the gridview and the object data source you have specified sponsorid. but it is not specified in the UpdateSponsorUser in the sponsorBLL.cs.

<asp:BoundField DataField="sponsorid" HeaderText="sponsorid" InsertVisible="False"
                                            ReadOnly="True" SortExpression="sponsorid" Visible="False" />
                                    </Columns>

and in the data source...
<asp:Parameter Name="sponsorid" Type="Int32" />

but it is not present in the mehtod..
  UpdateSponsorUser(string sname, string semail, string webaddress, string sdesc, string tel, string address)



Good Luck!
0
 
kasondeAuthor Commented:
I added the sponsorid to the sponsor but still did not work..is the session sponsorid supposed to be present parameters for the update method?  I am trying to update a row of tables based on the session passed..e.g.update sname, semail, webaddres etc. WHERE sponsor.id = Session["sponsorid"]; thanks for your help
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

 
oxyooCommented:
Hi,

I am unsure about this but it seems as if it wants the sponsorid as a parameter to your UpdateSponsorUser.

But I'm only guessing here.

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, false)]
    public propview.sponsorsDataTable UpdateSponsorUser(string sname, string semail, string webaddress, string sdesc, string tel, string address)
    {
        return UpdateSponsorUser(sname, semail, webaddress, sdesc, tel, address, original_sponsorid);
    }

Open in new window

0
 
kasondeAuthor Commented:
That was a mistake I guess..the sponsor id is been passed as a session in the where clause e.g. WHERE id = Session["user"]..who do I include that in my DAL, or pls advise on how  I can pass session to the query for updating using the objectdatasource and gridview..Assistance much appreciated.
0
 
oxyooCommented:
I would not recommend you to use Session objects in the DAL, that is more of a UI thing. Doing so would mean that your DAL will need a System.Web(?) reference which I do not think is suitable for a DAL layer.

A better solution in my opinion is if you pass it along with your methods.

Just my 2c..
0
 
kasondeAuthor Commented:
can you show me an implementation or at least lead me in the right direction, how would I pass it along with my methods?
0
 
Bob LearnedCommented:
This is where you are getting that field name from:
OldValuesParameterFormatString="original_{0}"
0
 
kasondeAuthor Commented:
Thanks. simple straight to the point.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.