【问题标题】:Cannot call update function on gridview无法在gridview上调用更新功能
【发布时间】:2014-03-08 16:35:40
【问题描述】:

每次调用更新函数时都会遇到问题, 我相信问题的根源是因为这个函数获取了对象参数, 并且还从不同的源中获取一个参数,我没有正确地这样做。

这是错误: http://prntscr.com/2z0cd6

GridView 代码:

<asp:GridView ID="gvAnimals" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="ObjectDataSourceAnimals" ForeColor="#333333" GridLines="None" DataKeyNames="animalId">
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                    <asp:BoundField DataField="animalId" HeaderText="animalId" SortExpression="animalId" />
                    <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
                    <asp:CheckBoxField DataField="vertebrates" HeaderText="vertebrates" SortExpression="vertebrates" />
                    <asp:CheckBoxField DataField="vegetarian" HeaderText="vegetarian" SortExpression="vegetarian" />
                    <asp:CheckBoxField DataField="terrestrial" HeaderText="terrestrial" SortExpression="terrestrial" />
                    <asp:BoundField DataField="kind" HeaderText="kind" SortExpression="kind" />
                    <asp:BoundField DataField="avgWeight" HeaderText="avgWeight" SortExpression="avgWeight" />
                    <asp:BoundField DataField="avgHeight" HeaderText="avgHeight" SortExpression="avgHeight" />
                    <asp:BoundField DataField="infoAdress" HeaderText="infoAdress" SortExpression="infoAdress" />
                    <asp:BoundField DataField="imageAdress" HeaderText="imageAdress" SortExpression="imageAdress" />
                </Columns>
                <EditRowStyle BackColor="#999999" />
                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                <SortedAscendingCellStyle BackColor="#E9E7E2" />
                <SortedAscendingHeaderStyle BackColor="#506C8C" />
                <SortedDescendingCellStyle BackColor="#FFFDF8" />
                <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
            </asp:GridView>
            <asp:ObjectDataSource ID="ObjectDataSourceAnimals" runat="server" DeleteMethod="DeleteAnimal" OldValuesParameterFormatString="original_{0}" SelectMethod="GetAllAnimals" TypeName="BLProject.Animal" UpdateMethod="UpdateAnimal" DataObjectTypeName="BLProject.Animal">
                <DeleteParameters>
                    <asp:Parameter Name="a" Type="Object" />
                    <asp:SessionParameter Name="newsAdress" SessionField="Adress" Type="String" />
                </DeleteParameters>
                <SelectParameters>
                    <asp:ControlParameter ControlID="textSearch" Name="Search" PropertyName="Text" Type="String" />
                    <asp:ControlParameter ControlID="dropdownlistAnimalToSearch" Name="type" PropertyName="SelectedValue" Type="String" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="a" Type="Object" />
                    <asp:SessionParameter DefaultValue="D:\\project\\Ilan Project 29-11\\Web\\NewsInfo" Name="newsAdress" SessionField="Adress" Type="String" />
                </UpdateParameters>
            </asp:ObjectDataSource>

*我相信错误的来源是粗体

更新功能:

[DataObjectMethod(DataObjectMethodType.Update)]
    public static int UpdateAnimal(Animal a, string newsAdress)

Animal a是grid view通过select函数得到的object参数, 但是地址是来自会话源的另一个参数,该函数也可以获取。 但是,由于我添加了此参数,因此出现了这个新错误。

谢谢。

【问题讨论】:

标签: c# asp.net gridview objectdatasource aspxgridview


【解决方案1】:

你可以这样做:

用这个改变你的方法

public void UpdateAnimal(int animalId, string name, bool vertebrates, bool vegetarian, string newsAdress)
    {

    }

和你的 ObjectDataSource

<asp:ObjectDataSource ID="ObjectDataSourceAnimals" runat="server" DeleteMethod="DeleteAnimal" SelectMethod="GetAllAnimals" TypeName="BLProject.Animal" UpdateMethod="UpdateAnimal">
            <DeleteParameters>
                <asp:Parameter Name="a" Type="Object" />
                <asp:SessionParameter Name="newsAdress" SessionField="Adress" Type="String" />
            </DeleteParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="textSearch" Name="Search" PropertyName="Text" Type="String" />
                <asp:ControlParameter ControlID="dropdownlistAnimalToSearch" Name="type" PropertyName="SelectedValue" Type="String" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Name="animalId" Type="Int32"/>
                .......the other fields from Animal that you want to update
                <asp:Parameter Name="name" Type="String"/>
                <asp:Parameter Name="vegetarian" Type="Boolean"/>
                <asp:Parameter Name="vertebrates" Type="Boolean"/>
                <asp:SessionParameter DefaultValue="D:\\project\\Ilan Project 29-11\\Web\\NewsInfo" Name="newsAdress" SessionField="Adress" Type="String" />
            </UpdateParameters>
        </asp:ObjectDataSource>

似乎在使用DataObjectTypeName时不能添加参数。解决方案是将编辑为参数的Animal 行的部分或全部属性加上另一个参数。

如果要使用OldValuesParameterFormatString="original_{0}",请将int original_animalid添加到方法输入参数中。

【讨论】:

  • 我更改了,但仍然无法正常工作:prntscr.com/2z2mdm,我还尝试添加以下内容:"DataObjectTypeName="BLProject.Animal" 但我遇到了一个新错误:prntscr.com/2z2n3g
  • 使用参数的时候不要加上这个DataObjectTypeName,不用的也去掉OldValuesParameterFormatString。我测试了这段代码并且正在工作,再次检查方法参数类型必须与 Animal 类中的匹配。
  • 嘿,感谢您的帮助,但现在删除不起作用,它不发送所有参数,它只是发送对象的 id。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
相关资源
最近更新 更多