前端後臺資料操作經驗記錄一
阿新 • • 發佈:2019-01-25
場景: 臨近離職的一段時間接觸到一個小功能,如下圖所示新增一個複選框checkbox,當勾上時,將明細裡面的訂單號寫到開票備註裡面去。並且訂單號不要重複,重複就沒有意義了。
那麼問題就來了:我是要前端插入還是後端資料庫插入,一想到不要重複,當然sql操作方便啊,於是就有了下面的嘗試
嘗試一:資料庫寫sql語句插入
UPDATE HtTax_KaiPiaoBills3 SET KpRemarks = (SELECT DISTINCT NumAtCard+',' FROM dbo.HtTax_KaiPiaoDetail3
WHERE KaiPiaoBills_FK='"+oid+"' FOR XML PATH('')) WHERE HtTax_KaiPiaoBills3OID='"+oid+"'"
但是插入後發現數據是插進資料庫去了,但是頁面上仍然需要重新整理才會顯示出來,重新整理頁面是個很麻煩的事,首先頁面元素夠多,為了一小點兒地方整體重新整理總感覺有點得不償失,想起來ajax技術,區域性重新整理,於是就有了下面的嘗試。
嘗試二:1.前端操作,將明細中頁面上的資料取出來存到一個數組。
2.將陣列中重複的訂單號去掉存入另一陣列
3.將陣列中的資料存入到變數
4.將變數賦值給頁面上備註控制元件。
function FillRemark()
{
if ($("#IswoffexcEdit").get(0).checked)
{
var oldIndex=BC_KaiPiaoDetailBase.recordIndex;
var NumAtCard=" ";
for(var i=0; i< BC_KaiPiaoDetailBase.getRecordCount(); i++)
{
BC_KaiPiaoDetailBase.SetIndexNoEvent(i);
var fsno=BC_KaiPiaoDetailBase.getFieldValue("NumAtCard");
NumAtCard=fsno+","+NumAtCard;
}
BC_KaiPiaoDetailBase.SetIndexNoEvent(oldIndex);
var array=new Array();
array=NumAtCard.split(",");
var newArr = [];
for(var i =0;i<array.length-1;i++)
{
if(newArr.indexOf(array[i]) == -1)
{
newArr.push(array[i]);
}
}
var NumAtCard1=newArr.join(",");
BC_KaiPiaoBillsBase.setFieldValue("KpRemarks",NumAtCard1);
}
else
{
BC_KaiPiaoBillsBase.setFieldValue("KpRemarks"," ");
}
}
然後提交的時候備註就存入了資料庫;
兩者操作的不同:前者是先在資料庫插入資料,後再頁面顯示;後者是現在前端賦值給控制元件,然後把控制元件的值存入資料庫。
知識碎片:
1.SQL函式:
FOR XML PATH('') 此處為了和並列。
2.js陣列資料去重:
思路:新建一個數組,然後迴圈檢查該新建陣列中是否有原陣列中的資料,不存在就存入(push).