我有一个类DocumentRuleViewModel
,它具有以下函数定义
Insert(ReplaceRule Obj, int DocumentId)
Select(int DocumentId)
Update(ReplaceRule Obj)
Delete(ReplaceRule Obj)
select
,update
和delete
功能可以很好地适用于objectdatasource
,但是insert
不希望工作并且一直告诉我对象是空的
我收到的错误消息是ObjectDataSource 'dsDocumentSourceRules' has no values to insert. Check that the 'values' dictionary contains values.
有一些像这样的问题,但是我发现没有任何问题可以帮助解决这个问题。
我正在使用的代码在
之下 <dx:ASPxGridView runat="server" ID="gvDocumentRules"
AutoGenerateColumns="False" DataSourceID="dsDocumentSourceRules" KeyFieldName="ID"
ClientInstanceName="gdDocRules">
<Columns>
<dx:GridViewCommandColumn ShowDeleteButton="True" VisibleIndex="0" ShowNewButtonInHeader="True" ShowEditButton="True">
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="ID" VisibleIndex="1"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="TypeID" VisibleIndex="2"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="SearchFor" VisibleIndex="3">
</dx:GridViewDataTextColumn><dx:GridViewDataTextColumn FieldName="ReplaceText" VisibleIndex="4"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="OrderIndex" VisibleIndex="5"></dx:GridViewDataTextColumn>
</Columns>
</dx:ASPxGridView>
<asp:ObjectDataSource runat="server" ID="dsDocumentSourceRules"
DataObjectTypeName="DocumentBuilder.Models.ReplaceRule"
DeleteMethod="Delete"
InsertMethod="Insert"
SelectMethod="RetrieveRulesForDocument"
TypeName="DocumentBuilder.ViewModel.DocumentRuleViewModel"
UpdateMethod="Update">
<InsertParameters>
<asp:Parameter Name="obj" Type="Object"></asp:Parameter>
<asp:ControlParameter ControlID="DocumentTypeIDTextBox" PropertyName="Text" DefaultValue="0" Name="DocumentId" Type="Int32"></asp:ControlParameter>
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="DocumentTypeIDTextBox" PropertyName="Text" DefaultValue="0" Name="DocumentId" Type="Int32"></asp:ControlParameter>
</SelectParameters>
</asp:ObjectDataSource>
感谢任何想法或解决方案。我觉得我好像缺少一些基本的东西
答案 0 :(得分:0)
感谢DevExpress团队在他们的网站上回复
感谢您的澄清。根据答案 ObjectDataSource没有要插入的值,它似乎是 无法将其他参数传递给Insert方法使用 这种方法。我建议你使用ObjectDataSource.OnInserting 事件处理程序并调用自定义Insert方法。不要忘记 将e.Cancel属性设置为false,否则设置为您的方法 将调用在InsertMethod属性中指定的。请参阅 以下代码段和附加项目。
protected void dsDocumentSourceRules_Inserting(object sender,
ObjectDataSourceMethodEventArgs e) {
ReplaceRule rule = (ReplaceRule)e.InputParameters["obj"];
DocumentRuleViewModel.Insert(rule, Int32.Parse(DocumentTypeIDTextBox.Value.ToString()));
e.Cancel = true; }
...
[DataObjectMethod(DataObjectMethodType.Insert, true)] public static
void Insert(ReplaceRule obj, Int32 DocumentId) {
obj.ID = data.Count;
obj.TypeID = DocumentId;
data.Add(obj); }