2013-03-19 4 views
1

J'ai 2 gridviews, gv1 et gv2 et un ObjectDataSource avec l'id ods1. Les deux grilles pointent vers DataSourceID="ods1".Comment obtenir le nom d'appel Gridview en ObjectDataSource Sélection événement

Ma question est, comment puis-je savoir en cas d'une sélection ObjectDataSource ce qui gridview a appelé ods1. Je veux définir les paramètres d'entrée en fonction de quel gridview a appelé le ods1.

+0

Pouvez-vous poster votre code? ce que vous avez essayé ..? –

Répondre

-1

Pour obtenir le nom du gridview qui appellent le ObjectDataSource

Vous pouvez faire quelque chose comme:

string CallingGridName = ((ObjectDataSourceID)sender).ID; 
+1

Ce n'est pas correct. Tout d'abord, vous ne pouvez pas convertir la variable 'sender' en quelque chose qui n'est pas un type réel, vous devez le convertir en' ObjectDataSource'. Deuxièmement, même si vous l'avez fait, votre code reçoit toujours l'ID de 'ObjectDataSource', et l'OP demande l'ID de' GridView'. – jadarnel27

+0

(pour votre défense, c'est ainsi que j'ai lu la question la première fois, donc c'est une erreur facile à faire) – jadarnel27

0

Je pense que ce n'est pas facilement possible et il se sent comme il serait contraire à l'idée sous-jacente ODS.

Vous pouvez déléguer deux ObjectDataSource pour obtenir les données de la même classe de référentiel, mais vous avez quand même besoin de deux sources de données différentes si vous souhaitez avoir deux ensembles de paramètres différents. Ainsi, vous ne dupliquez pas de code car le code du référentiel est partagé entre les instances de source de données d'objet.

0

Avertissement: Hack avant

Je suis d'accord avec Wiktor Zychla's answer, mais si vous vraiment besoin de le faire ...

La seule chose que je peux penser pour y parvenir serait de gérer l'événement "DataBinding" de chacun de vos GridView s, et définissez une variable de session pour indiquer laquelle est sur le point d'appeler l'événement "Selecting" ObjectDataSource.

Vous auriez votre GridView méthodes:

protected void gv1_DataBinding(object sender, EventArgs e) 
{ 
    Session["currentGridID"] = "gv1"; 
} 

et

protected void gv2_DataBinding(object sender, EventArgs e) 
{ 
    Session["currentGridID"] = "gv2"; 
} 

Et puis, votre ObjectDataSource pourrait vérifier cette variable de session, pour voir l'ID est pendant que le ObjectDataSource on tire cette fois:

protected void ods1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
{ 
    if(Session["currentGridID"] == "gv1") 
    { 

    } 
    else 
    { 

    } 
} 
Questions connexes