如题,找了半天,不清楚什么地方出现了问题,就贴码求援了。
1、ObjectDataSource前台代码:
                <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="DeletePaper"
                    InsertMethod="InsterPaper" SelectMethod="SelectPaper" TypeName="papers" UpdateMethod="UpdatePaper" OnUpdating="ObjectDataSource1_Updating">
                    <DeleteParameters>
                        <asp:Parameter Name="paper_id" Type="Int32" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="paper_name" Type="String" />
                        <asp:Parameter Name="paper_exam_time" Type="String" />
                        <asp:Parameter Name="paper_start_time" Type="String" />
                        <asp:Parameter Name="paper_end_time" Type="String" />
                        <asp:Parameter Name="paper_id" Type="String" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="paper_name" Type="String" />
                        <asp:Parameter Name="paper_exam_time" Type="String" />
                        <asp:Parameter Name="paper_start_time" Type="String" />
                        <asp:Parameter Name="paper_end_time" Type="String" />
                    </InsertParameters>
                </asp:ObjectDataSource>
2、GridView代码
                <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
                    AutoGenerateColumns="False" BackColor="White" BorderColor="#CC9966" BorderStyle="None"
                    BorderWidth="1px" CellPadding="4" DataSourceID="ObjectDataSource1" Font-Size="10pt"
                    Width="820px" HorizontalAlign="Center" DataKeyNames="paper_id" OnRowUpdated="GridView1_RowUpdated">
                    <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
                    <RowStyle BackColor="White" ForeColor="#330099" />
                    <Columns>
                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" >
                            <ItemStyle Width="60px" />
                        </asp:CommandField>
                        <asp:TemplateField HeaderText="考试名称">
                            <EditItemTemplate>
                                <asp:TextBox ID="paper_name" runat="server" Text='<%# Bind("paper_name") %>' Width="80"></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("paper_name") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="90px" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="建立时间">
                            <EditItemTemplate>
                                &nbsp;<asp:Label ID="paper_" runat="server" Text='<%# Bind("paper_build_time") %>'></asp:Label>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server" Text='<%# Bind("paper_build_time") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="100px" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="考试时间">
                            <EditItemTemplate>
                                <asp:TextBox ID="paper_exam_time" runat="server" Text='<%# Bind("paper_exam_time") %>' Width="20px"></asp:TextBox>
                                分钟
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label3" runat="server" Text='<%# Bind("paper_exam_time") %>'></asp:Label>
                                分钟
                            </ItemTemplate>
                            <ItemStyle Width="65px" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="开考时间">
                            <EditItemTemplate>
                                <asp:DropDownList ID="sddlYear1" runat="server">
                                </asp:DropDownList>
                                年<asp:DropDownList ID="sddlMonth1" runat="server">
                                </asp:DropDownList>月&nbsp;
                                <asp:DropDownList ID="sddlDay1" runat="server">
                                </asp:DropDownList>日&nbsp;<br />
                                <asp:DropDownList ID="sddlHour1" runat="server">
                                </asp:DropDownList>时
                                <asp:DropDownList ID="sddlMinute1" runat="server">
                                </asp:DropDownList>分
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label4" runat="server" Text='<%# Bind("paper_start_time") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="220px" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="停考时间">
                            <EditItemTemplate>
                                &nbsp;<asp:DropDownList ID="sddlYear2" runat="server">
                                </asp:DropDownList>年
                                <asp:DropDownList ID="sddlMonth2" runat="server">
                                </asp:DropDownList>月<asp:DropDownList ID="sddlDay2" runat="server">
                                </asp:DropDownList>日<br />
                                <asp:DropDownList ID="sddlHour2" runat="server">
                                </asp:DropDownList>时
                                <asp:DropDownList ID="sddlMinute2" runat="server">
                                </asp:DropDownList>分
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label5" runat="server" Text='<%# Bind("paper_end_time") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="220px" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="考卷分数">
                            <EditItemTemplate>
                                &nbsp;<asp:Label ID="Label8" runat="server" Text='<%# Bind("paper_") %>'></asp:Label>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label6" runat="server" Text='<%# Bind("paper_") %>'></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="65px" />
                        </asp:TemplateField>
                    </Columns>
                    <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
                    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
                    <EditRowStyle HorizontalAlign="Center" />
                </asp:GridView>
代码接楼下

解决方案 »

  1.   

     3、GridView1_RowDataBound代码
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (((DropDownList)e.Row.FindControl("sddlYear1")) != null)
            {
                DropDownList sddlYear1 = (DropDownList)e.Row.FindControl("sddlYear1");
                for (int i = 2008; i <= 2015; i++)
                {
                    ListItem li = new ListItem(i.ToString(), i.ToString());
                    //sddlYear1.Items.Add(i.ToString());
                    sddlYear1.Items.Add(li);
                    if (i == ((DateTime)(DataBinder.Eval(e.Row.DataItem, "paper_start_time"))).Year)
                    {
                        li.Selected = true;
                    }
                }
                …………下略,是分别为sddlMonth1、sddlDay1等的生成。
            }
        }
    4、ObjectDataSource1_Updating代码,设置ObjectDataSoure1的UpdateParameters的值
        protected void ObjectDataSource1_Updating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            ObjectDataSource1.UpdateParameters["paper_name"].DefaultValue = ((TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("paper_name")).Text;
            ObjectDataSource1.UpdateParameters["paper_exam_time"].DefaultValue = ((TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("paper_exam_time")).Text;
            DateTime dt1 = new DateTime(int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlYear1")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlMonth1")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlDay1")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlHour1")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlMinute1")).SelectedValue),0);
            ObjectDataSource1.UpdateParameters["paper_start_time"].DefaultValue = dt1.ToString();
            DateTime dt2 = new DateTime(int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlYear2")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlMonth2")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlDay2")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlHour2")).SelectedValue), int.Parse(((DropDownList)GridView1.Rows[GridView1.EditIndex].FindControl("sddlMinute2")).SelectedValue), 0);
            ObjectDataSource1.UpdateParameters["paper_end_time"].DefaultValue = dt2.ToString();
            ObjectDataSource1.UpdateParameters["paper_id"].DefaultValue = (GridView1.DataKeys[GridView1.EditIndex].Value).ToString();
        }
    5、paper.cs代码
        public SqlDataSource CreateDs()
        {
            SqlDataSource sqlds = new SqlDataSource();
            sqlds.ProviderName = "System.Data.OleDb";
            sqlds.ConnectionString = ConfigurationManager.ConnectionStrings["App_connstr"].ConnectionString;
            sqlds.SelectCommand = "select * from paper";
            sqlds.InsertCommand = "insert into paper(paper_name,paper_exam_time,paper_start_time,paper_end_time) values(@paper_name,@paper_exam_time,@paper_start_time,@paper_end_time)";
            sqlds.UpdateCommand = "update paper set paper_name=@paper_name,paper_exam_time=@paper_exam_time,paper_start_time=@paper_start_time,paper_end_time=@paper_end_time where paper_id=@paper_id";
            sqlds.DeleteCommand = "delete from paper where paper_id=@paper_id";
            return sqlds;
        }    public void UpdatePaper(string paper_name, string paper_exam_time, string paper_start_time, string paper_end_time , string paper_id)
        {
            SqlDataSource sqlds = this.CreateDs();
            sqlds.InsertParameters.Add("@paper_name", TypeCode.String, paper_name);
            sqlds.InsertParameters.Add("@paper_exam_time", TypeCode.Int16, paper_exam_time);
            sqlds.InsertParameters.Add("@paper_start_time", TypeCode.String, paper_start_time);
            sqlds.InsertParameters.Add("@paper_end_time", TypeCode.String, paper_end_time);
            sqlds.UpdateParameters.Add("@paper_id", TypeCode.Int16, paper_id);
            sqlds.Update();
        }在Update时出现
    ObjectDataSource"ObjectDataSource1"未能找到带参数的非泛型方法"UpdatePaper":paper_name,paper_exam_time,paper_start_time,paper_end_time,paper_build_time,paper_,paper_id.在线急求援!!!!
      

  2.   

    仔细阅读 下面这段文字 就知道错误在那了首先,在APP_CODE中新建了个数据集EmployeesObject.xsd,然后新建了个新建了个WEB窗体,拖了个ObjectDataSource控件ObjectDataSource1,配置其数据源为前面的数据集,再拖了个GridView控件GridView1,配置其数据源为ObjectDataSource1,启用编辑,在运行的时候,点击编辑,更新后出现以下错误,请高手指教: ObjectDataSource“ObjectDataSource1”未能找到带参数的非泛型方法“Update”: Name, Sex, Age, UserName, Password, original_EmployeeID 注:这个例子我是参照MSDN上的演练做的,不知为什么会出错,Update方法也有配置了的,下面是MSDN上例子的地址,求高手指教,谢谢!^_^ 
    http://msdn2.microsoft.com/zh-cn/library/3h7eexxe(VS.80).aspx
    网友回复:等待高手出现啊^_^
    网友回复:我按照你给的下面内容重新试试,程序可以跑通,你再试试 
    http://msdn2.microsoft.com/zh-cn/library/3h7eexxe(VS.80).aspx
    网友回复:我重新试了一下,还是不行,数据显示没问题,可是当修改数据,执行UPDATE时就出错,点击某一行编辑,然后点更新就出现上面那个错误了 ObjectDataSource“ObjectDataSource1”未能找到带参数的非泛型方法“Update”: Name, Sex, Age, UserName, Password, original_EmployeeID 网友回复:你的数据源的问题啊
    网友回复: 引用 2 楼 stan0714 的回复:
    我按照你给的下面内容重新试试,程序可以跑通,你再试试 
    http://msdn2.microsoft.com/zh-cn/library/3h7eexxe(VS.80).aspx 
     请问你有没试过更新数据啊?我试了好多次都不行
    网友回复:http://blog.tiantiansoft.com/user1/9/archives/2006/2470.html 
    http://www.cnblogs.com/dugoogle/archive/2007/09/17/895795.html 
    http://forums.asp.net/p/993519/1295073.aspx#1295073 请查看以上的文章
    网友回复:我把GridView里面的EmployeeID列的只读属性设置为FALSE,就正确了!可是始终看不懂是什么原因,因为EmployeeID在数据库里是主键,在GridView中编辑是不想修改的,所以EmployeeID列才设为只读!
    网友回复:哈哈^_^ 我终于明白了! 当一开始新建EmployeesObject.xsd的时候,向导为你生成了一条默认的Update语句,如下: 
    Update(String EmployeeID, String Name, String Original_EmployeeID),返回int32; 
    其SQL语句为:UPDATE [Employee] SET [EmployeeID] = @EmployeeID, [Name] = @Name WHERE (([EmployeeID] = @Original_EmployeeID)); 而参数里面的EmployeeID在我引用的时候GridView默认是设为只读,所以与向导生成的Update语句冲突了!都是使用默认的方式,没想到竟然会出错,呵呵^_^ 刚我试了下,在数据集EmployeesObject.xsd中新建自定义的Update语句,如下: 
    UpdateQuery(String Name, String Original_EmployeeID),返回int32; 
    其SQL语句为:UPDATE Employee SET Name = @Name WHERE (EmployeeID = @Original_EmployeeID) 
    然后在页面的数据源ObjectDataSource中重新配置Update语句为自己新建的这条,EmployeeID在GridView还是设为默认,结果就不会出错了,呵呵~EmployeeID设为只读了,就不能作为参数传进去了!
      

  3.   

    你定义的那个方法跟声明的方法不是一个,差一个paper_参数。参数签名不同,同名的方法就是不同的方法,所以异常信息会告诉你“未能找到方法UpdatePaper”。
      

  4.   

    不是差一个,而是差两个参数,差别更大啦。要又快又准确地写程序,告诉你一个诀窍,不要先去写“public void UpdatePaper(....){....}”方法,你可以直接执行页面,让它出错,然后根据错误提示信息再去写这个方法(复制一些文字作为定义),这可以少走弯路。不要先写后台程序再设计前台,要用前台来驱使后台设计,免得浪费大量时间消磨在后台设计上。对于完全没有编程经验的人,这样做比较困难,因此它是先写出最底下的代码,再写高层一些的代码。对于应有经验的程序员,则要先写高层的东西,然后编译或者运行错误时才补充需要的底层的代码,在页面很简单时不必去先去写底层代码。
      

  5.   

    参数名对不上,或者OldValuesParameterFormatString应设为{0}(如果未实现Optimistic Currency).