【发布时间】:2011-01-17 13:21:03
【问题描述】:
我有一个gridview 数据绑定到一个objectdatasource。一切都很好,直到我将 2 列从 asp:BoundField 更改为 asp:TemplateField。这些是 UPC 列和零件列。我想为每个将用户带到另一个页面的字段显示一个链接按钮。现在 asp.net 期望这两个字段是更新存储过程的参数。为什么是这样?如何让它不假定这些列需要传递给存储过程?
这是网格视图的代码:
<asp:GridView ID="GridView1" runat="server" SkinID="MSDefault" AutoGenerateColumns="False" DataSourceID="CartDataSource" PageSize="25"
Width="100%" DataKeyNames="CartId" EmptyDataText="The cart is empty" OnRowDataBound="GridView1_RowDataBound" onrowcommand="GridView1_RowCommand">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True">
<ItemStyle Width="8%" />
</asp:CommandField>
<asp:BoundField DataField="CartId" HeaderText="CartId" InsertVisible="False" ReadOnly="True"
SortExpression="CartId" Visible="False" />
<asp:TemplateField HeaderText="UPC" SortExpression="UPC">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="ShowInfo" CommandArgument='<%# Bind("UPC") %>' Text='<%# Bind("UPC") %>'></asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="9%" />
</asp:TemplateField>
<asp:BoundField DataField="Mfr" HeaderText="Mfr" ReadOnly="True" SortExpression="Mfr">
<ItemStyle Width="11%" />
</asp:BoundField>
<asp:TemplateField HeaderText="Part" SortExpression="Part">
<ItemTemplate>
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="ShowInfo" CommandArgument='<%# Bind("UPC") %>' Text='<%# Bind("Part") %>'></asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="10%" />
</asp:TemplateField>
<asp:BoundField DataField="CustPart" HeaderText="Cust Part" ReadOnly="True" SortExpression="CustPart">
<ItemStyle Width="10%" />
</asp:BoundField>
<asp:BoundField DataField="PartDesc" HeaderText="Description" ReadOnly="True" SortExpression="PartDesc">
<ItemStyle Width="30%" Wrap="True" />
</asp:BoundField>
<asp:TemplateField HeaderText="Marked" SortExpression="Marked">
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Marked") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Marked") %>' Enabled="false" />
</ItemTemplate>
<ItemStyle Width="2%" />
</asp:TemplateField>
<asp:BoundField DataField="Quantity" DataFormatString="{0:d}" HeaderText="Quantity"
SortExpression="Quantity">
<ItemStyle HorizontalAlign="Right" Width="4%" />
</asp:BoundField>
<asp:TemplateField HeaderText="Price" SortExpression="Price">
<ItemStyle HorizontalAlign="Right" Width="8%" />
<ItemTemplate>
<asp:Label ID="lblPrice" runat="server"></asp:Label>
<asp:LinkButton ID="LnkBtnCallLocalBranch" runat="server" Visible="false" PostBackUrl="~/UserProfile/LocalDistributors.aspx">call local branch</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Ext Price" SortExpression="ExtPrice">
<ItemStyle HorizontalAlign="Right" Width="8%" />
<ItemTemplate>
<asp:Label ID="lblExtPrice" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这里是objectData源代码
<asp:ObjectDataSource ID="CartDataSource" runat="server" OldValuesParameterFormatString="{0}" DeleteMethod="DeleteWithKey" SelectMethod="GetDataByCUserId"
TypeName="PunchoutData.CartDataSetTableAdapters.CartTableAdapter" UpdateMethod="UpdateQuantityAndMarked" OnUpdated="CartDataSource_Updated" OnObjectCreated="CartDataSource_ObjectCreated">
<DeleteParameters>
<asp:Parameter Name="cartid" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="marked" Type="Boolean" />
<asp:Parameter Name="quantity" Type="Int32" />
<asp:Parameter Name="cartid" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:SessionParameter Name="cuserid" SessionField="CUserId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
这是正在生成的错误
ObjectDataSource 'CartDataSource' 找不到具有以下参数的非泛型方法 'UpdateQuantityAndMarked':Marked、Quantity、CartId、UPC、Part。
【问题讨论】:
标签: asp.net data-binding objectdatasource