我有一个包含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功能是否已运行?如果它已经运行,那么不要再运行?
答案 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。