簡體   English   中英

如何實現復選框的屬性以在不使用Grid對象或jQuery.Data(Input)的情況下跟蹤表中每一行的更改?

[英]How to implement properties of checkbox to keep track of your changes on each line in your table without employing Grid object or jQuery.Data(Input)?

在此處輸入圖片說明

如何在不涉及Grid或jQuery.Data(input)邏輯的情況下僅在更改的行上選擇性地執行表單請求?

除了該程序較舊之外,AJAX不適用於此處,因為我不希望用戶輸入更改時每一行都觸發更改事件! 我要提交的內容是:用戶完成所有行更改后,只需單擊1次單擊事件!

那么,最小化瀏覽器-服務器行程的最簡單的捷徑是什么?

每行我都有這個不可見的復選框

<input type="checkbox" style="display:none;" name="N_CheckChanged">

和該行上的其他隱藏對象以跟蹤更改。

<input type="hidden" value="beforeChangeVal" name="h_CertainObject">

我在服務器端進行更改的代碼是

string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");

但是,如果您要使用名稱派生(提取復選框的前綴以獲取其他對象的名稱)來哈希到對象的新值以更新數據庫,則代碼可能會很混亂。 而且,那不好。

要回答上述問題,您必須知道

復選框元素具有這兩個不同的屬性

一世。 檢查==是/否

II。 值:='任何字符串值'

一個與另一個無關。

CHECKED屬性中,僅當該行發生更改時,才將其設置為true 復選框對象將從Server.Request使自己無形的 (禁用), 否則

VALUE屬性中,可以忽略該行的所有待發布值(類似於jQuery.Data(input)),而不必考慮選中的屬性== true / false!

提交瀏覽器后,執行

function do_checkChanges() {// checking each row
    for (var ii = 0; ii < document.getElementsByName("N_CheckChanged").length; ii++) {
        document.getElementsByName("N_CheckChanged")[ii].checked = 0;
    //detect changes
        if ((document.getElementsByName("R_DateResume")[ii].value != document.getElementsByName("h_DateResume")[ii].value)
            || (document.getElementsByName("R_CheckInhibited")[ii].value != document.getElementsByName("h_CheckInhibited")[ii].value)
            )
        {
            document.getElementsByName("N_CheckChanged")[ii].checked = 1;//mark the change
            document.getElementsByName("N_CheckChanged")[ii].value =
                document.getElementsByName("h_RowID")[ii].value + "|"
                + document.getElementsByName("R_CheckInhibited")[ii].checked + "|"
                + document.getElementsByName("R_DateResume")[ii].value
            ;
        }
    }
    whoPostBack.value = 'view2';
}

將更新存儲在復選框中之后,服務器端代碼應像微風一樣! 在服務器端,您所需要做的就是

string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");
if (formCheckChanged != null)
{
    foreach (string checkChanged in formCheckChanged)
    {
        sValues = checkChanged.Split('|');
        correspondedRow = sValues[0];
        data1 = sValues[1];
        data2 = sValues[2];
        theSqlCmd.CommandText =
            " update tb_LOG set InhibitedNow='" + data1 + "', InhibitEnd = '" + data2 + "', InhibitedBy = '" + MyConnections.userID
            + "' where RowID =" + correspondedRow;
        try
        {
            theSqlCmd.ExecuteNonQuery();
        }
        catch (Exception eX)
        {
            Response.Write(theSqlCmd.CommandText); Response.End();
        }
    }
    //Response.End();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM