2017-09-01 77 views
1

我有一個GridView,您可以在其中編輯行上的信息。所以你可以點擊該行並彈出一個可以改變內容的框,然後點擊保存。 但是,當我點擊保存按鈕並嘗試點擊另一行時,彈出框不再顯示。我必須徹底關閉表格,然後再返回並單擊一行。如果我不點擊保存按鈕,它工作正常。我點擊一行,關閉彈出框並點擊另一行。問題是隻有在點擊保存按鈕後。按鈕單擊後,GridView上的類屬性不起作用

GridView控件:

<asp:UpdatePanel ID="updOBSAddress" UpdateMode="Conditional" runat="server" > 
           <ContentTemplate> 
           <asp:GridView runat="server" GridLines="None" ID="GVAddresses" OnRowDataBound="GVAddresses_RowDataBound" AutoGenerateColumns="false" CssClass="tblStatus" AllowSorting="false" >      
            <Columns> 
             <asp:TemplateField HeaderText="Code"> 
              <ItemTemplate><%# Eval("AccountCode") %></ItemTemplate> 
             </asp:TemplateField> 
             <asp:TemplateField HeaderText="Name"> 
              <ItemTemplate><%# Eval("Name") %></ItemTemplate> 
             </asp:TemplateField> 
            </Columns> 
           </asp:GridView> 
          </ContentTemplate> 
        <Triggers> 
         <asp:AsyncPostBackTrigger ControlID="btnUpdateOBSAddress" /> 
        </Triggers> 
       </asp:UpdatePanel> 

代碼背後:

protected void GVAddresses_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     GridView gv = sender as GridView; 
     DataRowView drv = e.Row.DataItem as DataRowView; 
     //e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();"); 

     if (drv != null) 
     { 
      e.Row.Attributes.Add("class", "GVAddressesRow"); 
      e.Row.Attributes.Add("ID", "GVAddressesRow_" + drv["ID"].ToString()); 
      e.Row.ToolTip = "Click here to Edit Address"; 
     } 
    } 
} 

按鈕:

protected void btnUpdateOBSAddress_Click(object sender, EventArgs e) 
    { 

    } 

在那麼當類被點擊它應該顯示彈出,但是這並未javascript的點擊按鈕後我再也不會打電話了:

$(".GVAddressesRow").click(function (e) { 
      ShowAddOBSAddress(this, e.pageX, e.pageY, "Edit"); 
      EditOBSAddress($(this).attr("ID")); 
     }); 
+0

你在保存按鈕點擊做什麼? – CodingYoshi

回答

1

問題是UpdatePanel。它使用Ajax刷新GridView,儘管用戶看不到回發,但DOM仍然發生變化,並且以前使用$(".GVAddressesRow").click進行的綁定丟失。這就是爲什麼你必須在UpdatePanel刷新後再次執行它。

您可以使用PageRequestManager

<script type="text/javascript"> 
    $(document).ready(function() { 
     bindPopup(); 
    }); 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    prm.add_endRequest(function() { 
     bindPopup(); 
    }); 

    function bindPopup() { 
     $(".GVAddressesRow").click(function (e) { 
      ShowAddOBSAddress(this, e.pageX, e.pageY, "Edit"); 
      EditOBSAddress($(this).attr("ID")); 
     }); 
    } 
</script> 
0

它可以在第一時間,因爲你已經添加了一個單擊處理像這樣在GridView的所有行:$(".GVAddressesRow").click。但是當你點擊保存按鈕時,新的html(行)從服務器返回。您沒有爲這些新行添加處理程序,因此它們不起作用。

要解決此問題,您可以使用jquery on而不是click。 jquery on將適用於動態創建的html元素。有關更多信息,請參閱this answer

// Bind to all items with class GVAddressesRow inside 
// #whatever element, even new ones created later. 
$('#whatever').on('click', '.GVAddressesRow', function() { 
    /* your code here */ 
});