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