我在gridview标记(简化)中定义了以下内容:
<asp:GridView ID="grvReport" runat="server" DataSourceID="odsReport"
AutoGenerateColumns="False" DataKeyNames="EntryDate,EmployeeNumber">
然后我将数据源的更新参数定义为:
<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="IsJustified" Type="Boolean" />
<asp:Parameter Name="Comment" Type="String" />
<asp:Parameter Name="LastEditor" Type="String" />
</UpdateParameters>
但是在尝试更新时,我收到错误消息
无法找到非泛型方法 '更新'有参数:ID, IsJustified,评论,LastEditor, EntryDate, EmployeeNumber。
我可以避免将DataKey下的字段作为我的方法的参数吗?
注意:我可以通过简单地修改我的方法的参数并添加来自Gridview的额外值并且不对它们做任何事情来解决这个问题,但是如果有一种方法可以避免这些值甚至被发送,那将是很好的。
提前致谢,
EtonB。
答案 0 :(得分:3)
您可以使用ObjectDataSource更新事件
删除它们 void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
e.InputParameters.Remove("Type_ID");
e.InputParameters.Remove("Document_ID");
e.InputParameters.Remove("State_ID");
}
我使用DataKeys进行查找,但在更新过程中我不需要它们。
答案 1 :(得分:1)
我认为没有解决方法。微软认识到这个问题,并表示将在下一个版本中解决。点击此处了解详情:https://connect.microsoft.com/VisualStudio/feedback/details/260674/generated-default-update-method-in-datatableadapter-in-a-typed-dataset-shouuld-not-update-primary-key。
答案 2 :(得分:0)
数据键名称代表您正在更新的数据的主键,因此我不认为您可以/应该避免在更新方法中使用它们。如果ID确实是主键,则应将其列在数据键名称下。否则,您的更新方法应将EntryDate和EmployeeNumber作为参数而不是ID。