2012-01-04 20 views
10

Hãy để tôi cắt theo đuổi. Kịch bản của tôi là như sau: Tôi có các lĩnh vực tùy chỉnh được thêm vào để lọc RadGrid và lọc hoạt động hoàn hảo. Vấn đề xảy ra khi tôi muốn chỉnh sửa bản ghi bằng cách sử dụng EditForm bên trong RadGrid. Nó được sử dụng để làm việc tốt, nhưng sau đó tôi đã có một số vấn đề với việc lựa chọn hàng phải (tôi đã luôn luôn nhận được hàng sai chọn) vì vậy đây là những gì tôi đã làm để sửa chữa nó."Không thể hủy đăng ký UpdatePanel với ID 'xxx' vì nó không được đăng ký với ScriptManager ..." trong RadGrid trong khi chỉnh sửa bản ghi

Vì vậy, RadGrid của tôi với các bộ lọc như sau:

enter image description here

Những gì tôi đã làm là sử dụng phiên đó sẽ giúp chúng ta xác định sau này nếu các lọc RadGrid DataSource được thực hiện hoặc là mặc định một.

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    Session["SearchKontakti"] = "1"; 
} 

Sau đó tôi phải đặt PreRender với vòng lặp if để kiểm tra Phiên được đề cập trước đó.

protected void gvKontakti_PreRender(object sender, EventArgs e) 
{ 
    int idKontakt = Convert.ToInt32(Request.QueryString["idk"]); 

    if (Session["SearchKontakti"] == "1") 
    { 
     var kontakti = from k in db.Kontakt 
         select k; 

     int idTipUsera = Convert.ToInt32(rcbTipUsera.SelectedValue); 
     int idTvrtka = Convert.ToInt32(rcbTvrtka.SelectedValue); 

     if (rcbTvrtka.SelectedValue != "0") 
     { 
      kontakti = kontakti.Where(k => k.idFirma == idTvrtka); 
     } 

     if (rcbTipUsera.SelectedValue != "0") 
     { 
      kontakti = kontakti.Where(k => k.idOvlasti == idTipUsera); 
     } 

     if (chkAktivan.Checked == true) 
     { 
      kontakti = kontakti.Where(k => k.Aktivan == true); 
     } 
     else 
     { 
      kontakti = kontakti.Where(k => k.Aktivan == false); 
     } 

     int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]); 

     if (idKontakt > 0 && idAuthKontakt == idKontakt) 
     { 
      gvKontakti.DataSource = from k in kontakti 
            where k.idKontakt == idKontakt 
            orderby k.Prezime, k.Ime 
            select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password }; 
     } 
     else if (idKontakt > 0 && idAuthKontakt != idKontakt) 
     { 
      gvKontakti.DataSource = from k in kontakti 
            where k.idKontakt == idKontakt 
            orderby k.Prezime, k.Ime 
            select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password }; 
     } 
     else 
     { 
      gvKontakti.DataSource = from k in kontakti 
            orderby k.Prezime, k.Ime 
            select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password }; 
     } 

     gvKontakti.DataBind(); 
    } 
} 

Vì vậy, điều này đã khắc phục được vấn đề chính của tôi, nhưng đã cho tôi một vấn đề khác. Một số UserControls của tôi chứa UpdatePanel và cho mỗi UserControl có nó bất cứ khi nào tôi cố gắng bấm nút Chỉnh sửa từ RadGrid tôi nhận được thông báo sau: "Không thể hủy đăng ký UpdatePanel với ID 'UpdatePanel4' vì nó không được đăng ký với ScriptManager. xảy ra nếu UpdatePanel bị xóa khỏi cây điều khiển và sau đó được thêm lại, không được hỗ trợ Tên thông số: updatePanel "

Điều tôi muốn biết là cách khắc phục.

Kính trọng,

Hrvoje

Trả lời

32

Tôi không biết tại sao, nhưng bằng cách nào đó UpdatePanel là không đăng ký từ ScriptManger hai lần (nó sẽ xảy ra trong RadGrid.Rebind() phương pháp quá; tình hình tôi đã bị mắc kẹt trong), và lần thứ hai nó không được đăng ký từ ScriptManger bạn nhận được lỗi "Không thể hủy đăng ký UpdatePanel ...".

Cách giải quyết là để đăng ký UpdatePanel với ScriptManger đâu đó giữa hai sự kiện unregister, sử dụng phản chiếu, như thế này:

protected void UpdatePanel_Unload(object sender, EventArgs e) { 
    MethodInfo methodInfo = typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance) 
     .Where(i => i.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")).First(); 
    methodInfo.Invoke(ScriptManager.GetCurrent(Page), 
     new object[] { sender as UpdatePanel }); 
} 

bạn nên thêm UpdatePanel_Unload sự kiện OnUnload của UpdatePanel:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload"> 

Bạn có thể tìm thấy chi tiết đầy đủ của sự cố here

+0

Điều này làm việc cho tôi khi tôi đang di chuyển các điều khiển bên trong Bảng điều khiển. Tôi chỉ lập trình ràng buộc sự kiện Unload của bất kỳ UpdatePanels nào vào phương thức của bạn ở trên. Làm việc như một sự quyến rũ - không phải đăng ký lại hay bất cứ điều gì. –

+0

Tôi đã làm theo câu trả lời của bạn, nhưng nó đã không giúp tôi .. – pcs

+0

Có cảm ơn ...... – pcs

1
Protected Sub UpdatePanel_Unload(ByVal sender As Object, ByVal e As EventArgs) 
    Dim methodInfo As MethodInfo = GetType(ScriptManager).GetMethods(BindingFlags.NonPublic Or BindingFlags.Instance).Where(Function(i) i.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")).First() 
    methodInfo.Invoke(ScriptManager.GetCurrent(Page), New Object() {TryCast(sender, UpdatePanel)}) 
End Sub 


<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload"> 
1

Tôi cũng gặp vấn đề này .. khi tắt pahing trên lưới để xuất sang EXCEL. Tôi đã thay đổi bản phục hồi thành trên chế độ xem toàn cảnh

tức là RadGrid1.MasterTableView.AllowPaging = false; RadGrid1.MasterTableView.Rebind();

thay vì RadGrid1.MasterTableView.AllowPaging = false; RadGrid1.Rebind();

Trong trường hợp người khác có ...

Các vấn đề liên quan