appelez OnSelectedIndexChanged de GridView avant une autre fonction

J’ai deux GridViews. L’utilisateur peut sélectionner une ligne dans le premier GridView et une liste basée sur l’ID GridView sélectionné s’affiche.

Première grid: entrez la description de l'image ici

Deuxième grid: entrez la description de l'image ici

Code pour le premier GridView:

               

Code derrière:

 protected void gvCVRT_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { lookupCVRT work = (lookupCVRT)e.Row.DataItem; GridView gv = sender as GridView; ssortingng checklistid = work.ChecklistID.ToSsortingng(); e.Row.Atsortingbutes.Add("ID", "gvCVRT_" + work.ID); LinkButton btnDelete = (LinkButton)e.Row.FindControl("btnDelete"); btnDelete.CommandArgument = checklistid; if (work.ID != null) { int index = gv.Columns.HeaderIndex("Select"); if (index > -1) { e.Row.Cells[index].Atsortingbutes.Add("class", "gvCVRTRow"); e.Row.Cells[index].ToolTip = "Click here to Edit Checklist"; e.Row.Cells[index].Atsortingbutes.Add("style", "color:blue;cursor:pointer;cursor:hand"); } } } } 

Code pour gridviewParent_SelectedIndexChanged :

 protected void gridviewParent_SelectedIndexChanged(object sender, EventArgs e) { List workDetails = lookupCVRT.GetChecklistItemsByChecklistID(Company.Current.CompanyID, ParentID.ToSsortingng(), gvCVRT.SelectedDataKey.Value.ToSsortingng()); gvCVRTDetails.DataSource = workDetails; gvCVRTDetails.DataBind(); FireJavascriptCallback("setArgAndPostBack ();"); } 

Javascript:

 $(".gvCVRTRow").off(); $(".gvCVRTRow").click(function (e) { ShowAddEditCVRT(this, "Edit"); }); function ShowAddEditCVRT(sender, AddEdit) { $("#divCVRTDetails").fadeIn(300); } 

Désolé, c’est beaucoup de code, mais je voulais montrer exactement ce qui se passait. Lorsque je règle le code sur int index = gv.Columns.HeaderIndex("Select"); il va d’abord dans la fonction javascript ShowAddEditCVRT , qui essaye d’afficher la seconde grid divCVRTDetails . Mais je dois d’abord exécuter la méthode gridviewParent_SelectedIndexChanged car cela lie la deuxième grid à l’ID sélectionné dans la première grid.

La seule façon pour que la deuxième grid soit liée en premier est de changer le code en ceci: int index = gv.Columns.HeaderIndex("Checklist Date"); . Ainsi, l’utilisateur doit d’abord cliquer sur sélectionner (pour relier la grid), puis cliquer sur la cellule de date pour afficher la grid.

Ma question est donc la suivante: est-il possible d’exécuter la méthode gridviewParent_SelectedIndexChanged avant que la fonction javascript soit appelée?

Voir le lien ci-dessous pour plus de détails où j’ai trouvé cette information.

http://www.codeproject.com/Questions/246366/run-javascript-from-side-server-in-asp-net-and-csh

Vous pouvez append votre javascript du côté serveur après avoir lié votre gridview.

 protected void Page_Load(object sender, EventArgs e) { Ssortingng script = @""; Page.RegisterClientScriptBlock("experiment", script); gvCVRT.Atsortingbutes.Add("DataBound", "TestJScript()"); 

Je crois que cela remplace votre FireJavascriptCallback (“setArgAndPostBack ();”);

EDIT J’ai changé le code pour mieux correspondre à ce que vous avez fourni et également où mettre le code. Je pense qu’il devrait aller sous le chargement de page. J’ai également changé le fichier gvCVRT.Atsortingbutes.Add pour que le javascript s’exécute lorsque le fichier gvCVRT est associé à la date.

La réponse à cette question est que j’ai appelé javascript en utilisant FireJavascriptCallback("myFunction();"); Il suffit ensuite de mettre le code javascript dont j’avais besoin dans cette fonction.

FireJavascriptCallback est une fonction:

  protected void FireJavascriptCallback(ssortingng JSFunctionName) { System.Web.UI.ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "Callback", JSFunctionName, true); }