2016-04-08 6 views
0

Ich habe eine Klasse DocumentRuleViewModel, die die folgenden Funktionsdefinitionen hatObject hat keine Werte params mehrere einfügen, um

Insert(ReplaceRule Obj, int DocumentId) 
Select(int DocumentId) 
Update(ReplaceRule Obj) 
Delete(ReplaceRule Obj) 

Die select, update und delete Funktionen mit meinem objectdatasource gut funktionieren, aber die insert nicht arbeiten wollen und hält mir zu sagen, dass das Objekt ich recieving

die Fehlermeldung ist ObjectDataSource 'dsDocumentSourceRules' has no values to insert. Check that the 'values' dictionary contains values.

leer ist 0

Es gibt ein paar Fragen wie diese, aber keine, die ich gefunden habe, die in der Frage helfen, was ich daraus machen könnte.

Der Code verwende ich unter

<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> 

Irgendwelche Gedanken oder Lösungen wird geschätzt. Ich fühle mich, als ob ich fehle etwas Grundsätzliches

Antwort

0

Dank des DevExpress Team für ihre Antwort auf ihrer Website

Vielen Dank für die Klarstellung. Entsprechend den Antworten auf ObjectDataSource hat keine Werte zu einfügen, es scheint, dass es unmöglich ist, zusätzliche Parameter an die Insert-Methode mit dieser Ansatz zu übergeben. Ich empfehle Ihnen, den ObjectDataSource.OnInserting Event-Handler zu verwenden und die benutzerdefinierte Insert-Methode aufzurufen. Vergessen Sie nicht setzen Sie die e.Cancel -Eigenschaft auf false, andernfalls wird die in der InsertMethod -Eigenschaft angegebene Methode aufgerufen. Bitte beachten Sie das folgende Code-Snippet und das angehängte Projekt.

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); } 
Verwandte Themen