2011-02-09 153 views
0

注意:我沒有實現上述解決方案,但關閉此問題並接受這個答案,即使你我沒有實現。比較舊值與新值並更新

做什麼是最好的方法?並且我知道我可以將轉發器存儲在不同的變種中並進行比較,但我只是想知道優雅的做法。

這裏是我for loop代碼,我想比較和更新已更改的值而忽略沒有改變

GridViewRow row = gv.SelectedRow;    
Repeater _rpt = gv.Rows[e.RowIndex].Cells[8].FindControl("rptReg") as Repeater; 
Repeater _rpt1 = gv.Rows[e.RowIndex].Cells[9].FindControl("rptVisitor") as Repeater; 

    for (int i = 0; i < _rpt.Items.Count; i++) {  
     TextBox _txt = _rpt.Items[i].FindControl("txtId") as TextBox;  
     TextBox _txt1 = _rpt.Items[i].FindControl("txtName") as TextBox;  

     if (_rpt1.Items.Count > i)   
      TextBox _txt3 = _rpt1.Items[i].FindControl("txtVisitor") as TextBox;  
      //update db 
     } 
    } 

回答

0

這是一個總的黑客,我敢肯定有一個更優雅的價值觀方式來處理它,但你可以在那裏拋出一個隱藏的領域,並使用onchange腳本設置你的表單元素來更新隱藏字段的值。然後檢查隱藏字段的值。

希望有人有更好的方式來做到這一點,但如果一切都失敗了。

如果你添加一個類的「hiddenIndicator」隱藏字段,併爲「causesChanged」你的表單元素,然後下面的Jquery應該做你想要什麼:

$(document).ready(function() { 
    $('input.causesChanged').change(function() { 
     $(this) 
      .closest('tr') // get the parent row 
      .find("input.hiddenIndicator") // find children that match the selector 
      .val('1'); //the value that indicates a change occured 
    }); 
}) 

我沒有測試的代碼但是我曾經在項目中使用過類似的東西。

+0

不知道會在我的情況的工作和我在EditItemTemplate中使用中繼器` '/> ` – 2011-02-09 19:16:56