2013-01-03 21 views
0

问题:ObjectDataSource在通过FormView调用更新方法时通过(基本上)空的数据对象发送数据。值的唯一字段是在FormView的DataKeyNames属性中列出的字段。当使用FormView来更新ObjectDataSource时使用空参数Telerik RadPanelBar

注:我在FormView中使用Telerik RadPanelBars。

当我在FormView的ItemUpdating事件打破,我看到:

  • 的密钥列表有两个项目,就像DataKeyNames属性。看起来不错。
  • OldValues和NewValues词典为空。他们没有任何东西。不是带有空值的字段名 - 它们实际上是零项空列表。

当我们到达ObjectDataSource的更新事件时,我们看到一个ProjectTask对象只有两个值(匹配DataKeyNames字段) - 其他所有字段都为空。

这里是更新方法我用:

public static void UpdateProjectTask(ProjectTask projectTask) 
    { 
     var dc = new PrbDataContext(); 
     dc.ProjectTasks.Attach(projectTask, true); 
     dc.SubmitChanges(); 
    } 

这里是为ObjectDataSource和FormView标记:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="ProjectBilling.Business.Data.ProjectTask" 
     SelectMethod="GetProjectTask" TypeName="ProjectBilling.Business.Data.ProjectTask" UpdateMethod="UpdateProjectTask" OldValuesParameterFormatString="original_{0}" OnUpdating="ObjectDataSource1_Updating"> 
     <SelectParameters> 
      <asp:Parameter DefaultValue="0" Name="projectTaskId" Type="Int32" /> 
     </SelectParameters> 
    </asp:ObjectDataSource> 
    <asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1" DefaultMode="Edit" 
     DataKeyNames="Id,Timestamp" OnItemUpdated="FormView1_ItemUpdated" Width="600px"> 

重要:我使用Telerik控制,他们需要一个奇怪的约束。

DataBinder.Eval(FormView1.DataItem, "TaskTemplateId") 

我也尝试过这种方法,它没有取得任何效果会更好:

((ProjectBilling.Business.Data.ProjectTask)(Container.DataItem ?? new ProjectBilling.Business.Data.ProjectTask())).BillNarrative 

控制是检索数据就好了;我无法更新它。

一如既往地感谢您的帮助,先生们。

这家伙似乎有类似的问题:Can’t get FormView values from ObjectDataSource on update

回答

0

Telerik的RadPanelBar不支持绑定的标记。这就是导致Empy OldValues和NewValues收藏的原因。

注意:在这里留下这个问题是因为它花了我一直的时间来弄清楚这个问题,而且关于它的interwebs几乎没有。 Telerik支持最终不得不承认数据绑定在RadPanelBar中不起作用。

相关问题