0

問題: ObjectDataSource は、FormView を使用して更新メソッドを呼び出すときに、(基本的に) 空のデータ オブジェクトを送信しています。値を持つ唯一のフィールドは、FormView の DataKeyNames プロパティにリストされているフィールドです。

注: FormView 内で Telerik RadPanelBars を使用しています。

FormView の ItemUpdating イベントを中断すると、次のことがわかります。

  • Keys リストには、DataKeyNames プロパティと同様に 2 つの項目があります。よさそうですね。
  • OldValues および NewValues ディクショナリは空です。彼らには何もありません。null 値を持つフィールド名ではありません - それらは文字通り項目がゼロの空のリストです。

ObjectDataSource の Updating イベントに到達すると、(DataKeyNames フィールドに一致する) 2 つの値だけを持つ ProjectTask オブジェクトが表示されます。他のすべてのフィールドは null です。

私が使用している更新方法は次のとおりです。

    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

4

1 に答える 1

0

Telerik の RadPanelBar は、マークアップでのデータバインディングをサポートしていません。これが、空の OldValues および NewValues コレクションの原因です。

注:これを理解するのに永遠にかかったので、この質問をここに残しておきます. Telerik のサポートは、データバインディングが RadPanelBar 内で機能しないという事実を認めなければなりませんでした。

于 2013-01-24T02:33:40.607 に答える