如果函数已经运行,如何停止运行

时间:2015-08-11 13:29:27

标签: c# asp.net visual-studio

我有一个包含Qty,Reason和Comment列的DataGrid。用户可以编辑这些字段,当他们这样做时,会创建一个汇报。但我只希望一次创造一次汇报 - 第一次更新某些东西。如果已经创建了汇报,那么我不想再创建它。因此,例如,用户编辑评论文本框,然后运行此代码:

// Loads the XML
$xml = simplexml_load_string($xmlstring);
if (false === $xml) {
    throw new RuntimeException("Error: Cannot create object");
}

当其他字段更新时,我有类似的功能。因此,当运行此函数时,它会调用UpdateDebrief函数:

public static void UpdateSerialComment(int SerNoID, string Comment)
    {
        JobPieceSerialNo SerNo = new JobPieceSerialNo(SerNoID);
        SerNo.Comment = Comment;
        SerNo.DeliveryDate = DateTime.Now;
        SerNo.DeliveryUser = CurrentUser.Username;
        SerNo.Update();

        UpdateDebrief(ID, ItemNo, QtyDelivered, QtyNOTDelivered, Reason);

    }

这会在数据库中创建一个新行。如何检查UpdateDebrief功能是否已运行?如果它已经运行,那么不要再运行?

2 个答案:

答案 0 :(得分:2)

由于您正在呼叫UpdateDebrief,您似乎已经知道自己处于更新案例中。那么为什么UpdateDebrief创建新的Debrief并调用Create()方法呢?

UpdateDebrief应该从数据库加载现有的Debrief记录并进行更新。我们不清楚你在为数据库层使用什么,所以我无法给你一个更具体的答案。

答案 1 :(得分:1)

我不确定你在这里做了什么,但如果这个汇报对象是整个网格的一个对象,你可以将它存储在会话变量中。例如:

public static void UpdateDebrief(int ID, string ItemNo, int QtyDelivered, int QtyNOTDelivered, string Reason)
{
    if (Session["Debrief"] == null)
    {
        JobDebrief deb = new JobDebrief
        {
            JobID = ID,
            ItemNo = "",
            QtyDelivered = 0,
            QtyNotDelivered = 0,
            DbriefReason = "",
            DbriefDate = DateTime.Now,
            DbriefedBy = CurrentUser.UserID
        };
        Session["Debrief"] = deb;
        deb.Create();
    }
}

您可能希望在页面加载时使用类似

的内容设置此会话变量
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session("Debrief") = ReadDebriefFromDB();
        ....
    }
}

<强> 重要

但如果这是&#34;汇报&#34;事物是一个&#34;项目&#34;或者&#34; Job&#34;,您必须为包含您的汇报对象的每个对象添加一个字段。这可能意味着在网格中有一个隐藏列,其中包含指向此汇报对象的指针,然后您可以测试该列的值是否为null。