2012-01-04 3 views
10

私を追いかけよう。私のシナリオは次のとおりです。RadGridをフィルタリングするカスタムフィールドが追加され、フィルタリングが完全に機能します。問題は、RadGrid内でEditFormを使用してレコードを編集する場合です。それはうまく動作していましたが、正しい行を選択する際にいくつか問題がありました(私は常に間違った行を選択していました)ので、これを修正しました。私が何をしたかレコードを編集中にRadGridの "ScriptManagerに登録されていないためUpdatePanelを 'xxx'に登録解除できません..."

enter image description here

がフィルタリングRadGrid DataSourceが開始された場合は、後で決定するために私たちを助けるセッションを使用することですか、それがデフォルトだった:

ので、フィルターと私のRadGridは次のようになります1。

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

その後、前述のセッションをチェックするために、ループを使用してPreRenderを設定する必要がありました。

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(); 
    } 
} 

これで私の主な問題は解決しましたが、もう1つ教えてください。私のUserControlsにはUpdatePanelが含まれていて、RadGridのEditボタンをクリックしてみると、UserControlごとにUserControlがあります。"ScriptPanelに登録されていないため、UpdatePanelをUpdatePanel4からアンロックできません。 。UpdatePanelの「

私が知りたいのですが、それを修正する方法である:のUpdatePanelコントロールツリーから削除し、以降のサポートされていない パラメータ名を、再び追加された場合に発生します。

よろしく、

Hrvoje

答えて

32

私はなぜ知らないが、何とかUpdatePanelは二回ScriptManger(それはあまりにもRadGrid.Rebind()方法で行われ、私はで立ち往生した状況を)から登録解除され、そしてもう一度ScriptMangerから登録を解除すると、「UpdatePanelを登録解除できません...」というエラーが表示されます。

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 }); 
} 

は、あなたがのUpdatePanelのUpdatePanel_UnloadからOnUnloadイベントを追加する必要があります

回避策は、このように、リフレクションを使用して、どこかに2つの登録解除イベント間のScriptMangerUpdatePanelを登録することです

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

問題の詳細を確認できますhere

+0

は、これは私がパネル内のコントロールを動かした時に私のために働きました。私はちょうど上記のあなたのメソッドに任意のUpdatePanelsのアンロードイベントをプログラム的にバインドしました。魅力のように働いた - それらを戻すか何かを登録する必要はありませんでした。 –

+0

私はあなたの答えに従ったが、それは私を助けなかった.. – pcs

+0

感謝...... – 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

グリッド上のpahingをオフにしてEXCELにエクスポートすると、この問題も発生しました。 リマスタリングをmastertableviewに変更しました

つまり RadGrid1.MasterTableView.AllowPaging = false; RadGrid1.MasterTableView.Rebind();

の代わりに RadGrid1.MasterTableView.AllowPaging = false; RadGrid1。Rebind();他にこれを持っていた場合、誰かに

...

関連する問題