1

テーブルのレコードセットを表示するグリッドビューがあります - Master2. gridview を使用して、このテーブルからレコードを削除したいと考えています。削除が行われる前に、削除を行った人の日時スタンプとユーザー ID を使用して履歴テーブルにレコードを挿入したいと考えています。これは可能ですか、それとも一連のドロップダウン ボックスと 1 つのボタンでフィールドを作成するだけですか?

4

3 に答える 3

1

FOR DELETEトリガー を使用します。

CREATE TRIGGER TriggerName    
ON TableName  
FOR DELETE    
AS     
BEGIN    
    INSERT INTO HistoryTable(Col1, Col2, Col3)  
    SELECT Col1, GETDATE(), Col3  
    FROM TableName  
    WHERE DeletedRecordID IN (SELECT DeletedRecordID FROM TableName)     
END  
于 2013-03-07T15:18:35.050 に答える
0

トリガーを使用します。

より安全です。つまり、その履歴テーブルからレコードを削除するたびに(メカニズムに関係なく)、それでも起動します。

また、.netコード内に何かを入れて処理する必要がないため、コーディングも簡単です。

最後に、関係するネットワークトラフィックがゼロであるため、より高速です。

于 2013-03-07T14:34:36.047 に答える
0

実際にレコードを削除するのではなく、削除フラグを使用することをお勧めします...グリッドビューに、選択するとトリガーされる追加のチェックポイントを追加します...このように

<asp:TemplateField HeaderText="Delete" SortExpression="ToBeDeleted">
                            <EditItemTemplate>
                                <asp:TextBox ID="txtToBeDeleted" runat="server" Text='<%# Bind("ToBeDeleted") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <%--<asp:Label ID="lblToBeDeleted" Width="20px" runat="server" Text='<%# Bind("ToBeDeleted") %>'></asp:Label>--%>
                                <asp:CheckBox ID="chkToBeDeleted" Width="20px" runat="server" Checked='<%# Bind("ToBeDeleted") %>' OnCheckedChanged="chkToBeDeleted_CheckedChanged" AutoPostBack="true"/>
                            </ItemTemplate>
                            <ItemStyle CssClass="overflowClass" HorizontalAlign="Center" Wrap="false" />
                        </asp:TemplateField>

次に、コード ビハインドでトリガーを処理します。

protected void chkToBeDeleted_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox cb = (CheckBox)sender;
            GridViewRow gvr = (GridViewRow)cb.NamingContainer;
            int id = (int)gvWines.DataKeys[gvr.RowIndex].Value;

            ListOfWine record = (from l in db.ListOfWines
                         where l.Id == id
                         select l).FirstOrDefault();

            //here you add the record to another table and then continue flagging the record for deletion

         record.ToBeDeleted = cb.Checked;
db.SaveChanges();
            gvWines.DataBind();
        }
于 2013-03-07T14:38:13.740 に答える