0

3 つのテーブルから正しく入力されたグリッドビューがあります。更新すると、1 つのフィールド (Komentar) のみが更新されますが、初回のみです。

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID,Erledigt,Kommentar"
        DataSourceID="ArtikelDataSource">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" 
                ReadOnly="True"  >
            <ControlStyle Width="150px" />
            </asp:BoundField>
            <asp:BoundField DataField="Beschreibung" HeaderText="Beschreibung" 
                SortExpression="Beschreibung" ReadOnly="True" >
            <ControlStyle Width="200px" />
            </asp:BoundField>
            <asp:BoundField DataField="Datum" HeaderText="Datum" SortExpression="Datum" 
                ReadOnly="True" >
            <ControlStyle Width="100px" />
            </asp:BoundField>
            <asp:BoundField DataField="Erledigt" HeaderText="Erledigt" 
                SortExpression="Erledigt" >
            <ControlStyle Width="50px" />
            </asp:BoundField>
            <asp:BoundField DataField="Kommentar" HeaderText="Kommentar" 
                SortExpression="Kommentar" >
            <ControlStyle Width="200px" />
            </asp:BoundField>
            <asp:BoundField DataField="LastUpdate" HeaderText="LastUpdate" 
                SortExpression="LastUpdate" ReadOnly="True" />
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" Visible="False" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="ArtikelDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
        SelectCommand="SELECT ci.Name, ci.Beschreibung, ca.ChkItemID, ca.ChkUserID, ca.Datum, ca.Erledigt, ca.Kommentar, ca.LastUpdate, ca.ID FROM ChecklistActions AS ca INNER JOIN ChecklistItems AS ci ON ca.ChkItemID = ci.ID INNER JOIN ChecklistUsers AS cu ON ca.ChkUserID = cu.ID WHERE (ca.Datum = @datum) AND (cu.Login = @userlogin)" 
        UpdateCommand="UPDATE ChecklistActions SET Kommentar = @Kommentar, LastUpdate = GETDATE() WHERE (ID = @ID)"       
        OnSelecting="_data_Selecting"
        >
        <SelectParameters>
            <asp:Parameter Name="userlogin"/>
            <asp:Parameter Name="datum"/>
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="Kommentar" Type="string"/>
            <asp:Parameter Name="ID" />
        </UpdateParameters>
    </asp:SqlDataSource>

最初に空のフィールド「Kommentar」があり、次に入力されますが、値を再度変更しようとすると、GETDATE() のみが値を変更し、Kommentar の内容は以前と同じです。

SQL経由で「Erledigt」の値を変更しようとすると

UpdateCommand="UPDATE ChecklistActions SET Erledigt = @Erledigt, Kommentar = @Kommentar, LastUpdate = GETDATE() WHERE (ID = @ID)" 
...
<asp:Parameter Name="Erledigt" Type="Int32"/>

何も (Getdate() を除いて) まったく更新されません。

グリッドビューが更新コマンドに古い値を送信しているようです (最初の更新のみが新しいコメンター値を受け取ります)。これは本当にイライラしますか?

4

1 に答える 1

0

, UpdateCommand で見逃した

UPDATE ChecklistActions SET Erledigt = @Erledigt, Kommentar = @Kommentar, LastUpdate = GETDATE() WHERE (ID = @ID)"

編集

データベース テーブルの主キー列名のみを として設定しますDataKeyNames。この場合、ChecklistActions テーブルのみを更新します。そのため、ChecklistActions の主キーを次のように設定しますDataKeyNames

于 2012-05-21T07:18:30.857 に答える