0

ASP .NET 2.0 アプリケーションで問題が発生しています。

ObjectDataSource (TabledAdapter (オプティミスティック コンカレンシーを使用する型指定されたデータセット) に接続する BLL クラスに接続) からのデータを表示する GridView があります。

選択 (データの表示) は正常に機能しますが、行を更新すると、GridView は古い値を ObjectDataSource に渡します。

    <DataObjectMethod(DataObjectMethodType.Update, True)> _
    Public Function UpdateOC(ByVal original_id As Integer, ByVal original_fotonummer As Integer, ByVal original_inhoud As String, ByVal original_postdatum As Date?, ByVal fotonummer As Integer, ByVal inhoud As String, ByVal postdatum As Date?) As Boolean
        Dim tweets As TwitpicOC.TweetsDataTable = adapterOC.GetTweetById(original_id)
        If tweets.Rows.Count = 0 Then Return False
        Dim row As TwitpicOC.TweetsRow = tweets(0)

        SmijtHetErIn(row, original_fotonummer, original_inhoud, original_postdatum)
        row.AcceptChanges()

        SmijtHetErIn(row, fotonummer, inhoud, postdatum)

        Return adapterOC.Update(row) = 1
    End Function

    Public Sub SmijtHetErIn(ByVal row As TwitpicOC.TweetsRow, ByVal original_fotonummer As Integer, ByVal original_inhoud As String, ByVal original_postdatum As Date?)
        With row
            .fotonummer = original_fotonummer
            If String.IsNullOrEmpty(original_inhoud) Then .SetinhoudNull() Else .inhoud = original_inhoud
            If Not original_postdatum.HasValue Then .SetpostdatumNull() Else .postdatum = original_postdatum.Value
        End With
    End Sub

そして、これはページの一部です:

<div id='Overzicht' class='post'>
    <div class='title'>
        <h2>
            <a href='javascript:;'>Tweetsoverzicht</a></h2>
        <p>
            Overzicht</p>
    </div>
    <div class='entry'>
        <p>
            <asp:ObjectDataSource ID="odsGebruiker" runat="server" OldValuesParameterFormatString=""
                SelectMethod="GetAll" TypeName="TakeHomeWeb.BLL.GebruikersBLL"></asp:ObjectDataSource>
            <asp:ObjectDataSource ID="odsFoto" runat="server" SelectMethod="GetFotosByGebruiker"
                TypeName="TakeHomeWeb.BLL.FotosBLL">
                <SelectParameters>
                    <asp:ControlParameter ControlID="ddlGebruiker" DefaultValue="0" Name="userid" PropertyName="SelectedValue"
                        Type="Int32" />
                </SelectParameters>
            </asp:ObjectDataSource>
            <form id="form1" runat="server">
            <asp:Label runat="server" AssociatedControlID="ddlGebruiker">Gebruiker:&nbsp;</asp:Label>
            <asp:DropDownList ID="ddlGebruiker" runat="server" AutoPostBack="True" DataSourceID="odsGebruiker"
                DataTextField="naam" DataValueField="userid" AppendDataBoundItems="True">
                <asp:ListItem Text="Kies een gebruiker" Value="-1" />
            </asp:DropDownList>
            <br />
            <asp:Label runat="server" AssociatedControlID="ddlFoto">Foto:&nbsp;</asp:Label>
            <asp:DropDownList ID="ddlFoto" runat="server" AutoPostBack="True" DataSourceID="odsFoto"
                DataTextField="url" DataValueField="id" AppendDataBoundItems="True">
                <asp:ListItem Value="-1">Kies een foto...</asp:ListItem>
            </asp:DropDownList>
            <br />
            <div style="float: left">
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id"
                    DataSourceID="odsTweets">
                    <Columns>
                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                        <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
                            SortExpression="id" />
                        <asp:BoundField DataField="fotonummer" HeaderText="fotonummer" SortExpression="fotonummer" />
                        <asp:BoundField DataField="inhoud" HeaderText="inhoud" SortExpression="inhoud" />
                        <asp:BoundField DataField="postdatum" HeaderText="postdatum" SortExpression="postdatum" />
                    </Columns>
                </asp:GridView>
                <asp:ObjectDataSource ID="odsTweets" runat="server" ConflictDetection="CompareAllValues"
                    DeleteMethod="DeleteOC" OldValuesParameterFormatString="original_{0}" SelectMethod="GetTweetsByFotoId"
                    TypeName="TakeHomeWeb.BLL.TweetsOCBLL" UpdateMethod="UpdateOC">
                    <DeleteParameters>
                        <asp:Parameter Name="original_id" Type="Int32" />
                        <asp:Parameter Name="original_fotonummer" Type="Int32" />
                        <asp:Parameter Name="original_inhoud" Type="String" />
                        <asp:Parameter Name="original_postdatum" Type="DateTime" />
                    </DeleteParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="original_id" Type="Int32" />
                        <asp:Parameter Name="original_fotonummer" Type="Int32" />
                        <asp:Parameter Name="original_inhoud" Type="String" />
                        <asp:Parameter Name="original_postdatum" Type="DateTime" />
                        <asp:Parameter Name="fotonummer" Type="Int32" />
                        <asp:Parameter Name="inhoud" Type="String" />
                        <asp:Parameter Name="postdatum" Type="DateTime" />
                    </UpdateParameters>
                    <SelectParameters>
                        <asp:ControlParameter ControlID="ddlFoto" Name="foto" PropertyName="SelectedValue"
                            Type="Int32" />
                    </SelectParameters>
                </asp:ObjectDataSource>
            </div>
            </form>
        </p>
    </div>
</div>

大きな失敗か何かが関係しているような気がしますが、何時間もじっと見つめていて、それを見つけることができません。

4

1 に答える 1

0

私はまったく同じ問題を抱えていました。楽観的同時実行を機能させようとしていたので、2列のテーブルの削除から始めました

しかし、ローカル ウィンドウによると、dataGrid は
主キー以外の値に null を渡しているようです。

とにかく、あちこちで微調整して読んだ後、これが私の問題の解決策でした:

ObjectDataSource で 1 つのプロパティを変更しました: ConflictDetection="CompareAllValues"

愚かな私..

于 2010-03-22T04:19:54.107 に答える