Проблемы с оптимистичным параллелизмом через ObjectDataSource и GridView - PullRequest
0 голосов
/ 18 марта 2010

У меня проблема в приложении ASP .NET 2.0.

У меня есть GridView, отображающий данные из ObjectDataSource (подключенного к классу BLL, который подключается к TabledAdapter (типизированный набор данных с использованием оптимистичного параллелизма).

Выбор (отображение данных) работает очень хорошо, однако, когда я обновляю строку, 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>

У меня такое чувство, что произошел огромный сбой или что-то в этом роде, но я смотрю на это уже несколько часов и просто не могу его найти.

1 Ответ

0 голосов
/ 22 марта 2010

У меня была точно такая же проблема. Я пытался заставить оптимистичный параллелизм работать поэтому я начал с удаления в таблице с 2 столбцами

но в соответствии с местным окном, казалось, что dataGrid передает ноль
для значений, отличных от первичного ключа.

в любом случае после настройки и чтения здесь и там, это было решением моих проблем:

в ObjectDataSource я изменил 1 свойство: ConflictDetection = "CompareAllValues"

глупая я ..

...