Comment incendie cliquez sur l'événement de la LinkButton dans gridview et Contextuel de la fenêtre en asp.net
J'ai essayé de construire un gridview avec des colonnes dynamiques en fonction de la source de données en utilisant le modèle de champs dans asp.net à l'aide de code derrière.
Pour que, à mettre en œuvre, nous avons développé une classe DynamicTemplate
qui met en œuvre la ITemplate
interface. Dans ce modèle de champs, j'ai inséré le LinkButton
dans chaque cellule et lorsque je clique sur la cellule de bouton de lien j'ai besoin d'afficher une Popup avec la valeur de la cellule sélectionnée.
Pour Exemple Détaillé s'il vous Plaît télécharger à partir de ce lien
Pour qui j'ai créé un Défaut.asxp page et a écrit ce qui suit.
public partial class Default : System.Web.UI.Page
{
DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
GenateGridView();
}
private void GenateGridView()
{
TemplateField tempField;
DynamicTemplate dynTempItem;
LinkButton lnkButton;
Label label;
GridView gvDynamicArticle = new GridView();
gvDynamicArticle.Width = Unit.Pixel(500);
gvDynamicArticle.BorderWidth = Unit.Pixel(0);
gvDynamicArticle.Caption = "<div>Default Grid</div>";
gvDynamicArticle.AutoGenerateColumns = false;
DataTable data = getBindingData();
for (int i = 0; i < data.Columns.Count; i++)
{
tempField = new TemplateField();
dynTempItem = new DynamicTemplate(ListItemType.AlternatingItem);
lnkButton = new LinkButton();
lnkButton.ID = string.Format("lnkButton{0}", i);
lnkButton.Visible = true;
string ColumnValue = data.Columns[i].ColumnName;
tempField.HeaderText = ColumnValue;
if (ColumnValue == "EmpName")
{
label = new Label();
label.ID = string.Format("Label{0}", i);
dynTempItem.AddControl(label, "Text", ColumnValue);
label.Width = 100;
}
else
{
dynTempItem.AddControl(lnkButton, "Text", ColumnValue);
lnkButton.Click += lnkButton_Click;
}
tempField.ItemTemplate = dynTempItem;
gvDynamicArticle.Columns.Add(tempField);
//////grdUserPivotDateTwo.Columns.Add(tempField);
}
gvDynamicArticle.DataSource = data;
gvDynamicArticle.DataBind();
divContainer.Controls.Add(gvDynamicArticle);
}
void lnkButton_Click(object sender, EventArgs e)
{
//showing cell values in popUp here..
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('cell clicked')");
}
private DataTable getBindingData()
{
dt = new DataTable();
dt.Columns.Add(new DataColumn("EmpName"));
dt.Columns.Add(new DataColumn("Monday"));
dt.Columns.Add(new DataColumn("TuesDay"));
dt.Columns.Add(new DataColumn("WednesDay"));
dt.Columns.Add(new DataColumn("ThursDay"));
dt.Rows.Add("EmpOne", "p", "p", "p", "a");
dt.Rows.Add("EmpTwo", "p", "a", "p", "p");
dt.Rows.Add("EmpThree", "p", "p", "p", "a");
dt.Rows.Add("EmpFour", "p", "a", "p", "p");
dt.Rows.Add("EmpFive", "p", "p", "p", "a");
dt.Rows.Add("EmpSix", "a", "p", "p", "p");
return dt;
}
}
et correspondant DynamicTemplate
classe est
public class DynamicTemplate : System.Web.UI.ITemplate
{
System.Web.UI.WebControls.ListItemType templateType;
System.Collections.Hashtable htControls = new System.Collections.Hashtable();
System.Collections.Hashtable htBindPropertiesNames = new System.Collections.Hashtable();
System.Collections.Hashtable htBindExpression = new System.Collections.Hashtable();
public DynamicTemplate(System.Web.UI.WebControls.ListItemType type)
{
templateType = type;
}
public void AddControl(WebControl wbControl, String BindPropertyName, String BindExpression)
{
htControls.Add(htControls.Count, wbControl);
htBindPropertiesNames.Add(htBindPropertiesNames.Count, BindPropertyName);
htBindExpression.Add(htBindExpression.Count, BindExpression);
}
public void InstantiateIn(System.Web.UI.Control container)
{
PlaceHolder ph = new PlaceHolder();
for (int i = 0; i < htControls.Count; i++)
{
//clone control
Control cntrl = CloneControl((Control)htControls[i]);
switch (templateType)
{
case ListItemType.Header:
break;
case ListItemType.Item:
ph.Controls.Add(cntrl);
break;
case ListItemType.AlternatingItem:
ph.Controls.Add(cntrl);
ph.DataBinding += new EventHandler(Item_DataBinding);
break;
case ListItemType.Footer:
break;
}
}
ph.DataBinding += new EventHandler(Item_DataBinding);
container.Controls.Add(ph);
}
public void Item_DataBinding(object sender, System.EventArgs e)
{
PlaceHolder ph = (PlaceHolder)sender;
GridViewRow ri = (GridViewRow)ph.NamingContainer;
for (int i = 0; i < htControls.Count; i++)
{
if (htBindPropertiesNames[i].ToString().Length > 0)
{
Control tmpCtrl = (Control)htControls[i];
String item1Value = (String)DataBinder.Eval(ri.DataItem, htBindExpression[i].ToString());
Control ctrl = ph.FindControl(tmpCtrl.ID);
Type t = ctrl.GetType();
System.Reflection.PropertyInfo pi = t.GetProperty(htBindPropertiesNames[i].ToString());
pi.SetValue(ctrl, item1Value.ToString(), null);
}
}
}
private Control CloneControl(System.Web.UI.Control src_ctl)
{
Type t = src_ctl.GetType();
Object obj = Activator.CreateInstance(t);
Control dst_ctl = (Control)obj;
PropertyDescriptorCollection src_pdc = TypeDescriptor.GetProperties(src_ctl);
PropertyDescriptorCollection dst_pdc = TypeDescriptor.GetProperties(dst_ctl);
for (int i = 0; i < src_pdc.Count; i++)
{
if (src_pdc[i].Attributes.Contains(DesignerSerializationVisibilityAttribute.Content))
{
object collection_val = src_pdc[i].GetValue(src_ctl);
if ((collection_val is IList) == true)
{
foreach (object child in (IList)collection_val)
{
Control new_child = CloneControl(child as Control);
object dst_collection_val = dst_pdc[i].GetValue(dst_ctl);
((IList)dst_collection_val).Add(new_child);
}
}
}
else
{
dst_pdc[src_pdc[i].Name].SetValue(dst_ctl, src_pdc[i].GetValue(src_ctl));
}
}
return dst_ctl;
}
}
Ici les Données montrant dans gridview
est très bien. Ici les Questions sont quand je clique sur le linkButton le rechargement de la page et pas de grille est de l'affichage après la publication.
deuxième question est, pour LinkButton
la Click Event
n'est pas de tir.
Merci de me fournir de l'aide des informations complètes/Échantillon pour afficher la fenêtre modale lorsque l'on clique sur le linkButton de la gridview.
- Pourquoi êtes-vous effectuer GUI de choses dans le code derrière? Ne pourrait-il pas être fait sur le déclaratif .page aspx? C'est aussi une bonne idée d'avoir une logique qui devrait arriver sur le côté client, telles que l'ouverture des fenêtres popup être faites qu'avec le JavaScript, car il n'a pas besoin d'impliquer serveur d'interaction.
- les colonnes ont été construite sur la condition et pas de.des colonnes d'affichage peut varier. j'ai besoin de sauvegarder les valeurs de la fenêtre pop-up après quelques modifications.c'est pourquoi j'essaie de l'utiliser côté serveur de l'événement.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le modèle ajax popup expender.
Conception d'un panneau avec des champs et l'utilisation du modèle contextuel expender pour l'affichage des popup
Ce lien a l'exemple de ce
http://www.asp.net/ajaxlibrary/ajaxcontroltoolkitsamplesite/modalpopup/modalpopup.aspx
et dans votre lien, cliquez sur le bouton
vous devez utiliser la méthode show pour ouvrir la popup
ce code génère un gridview seulement si elle n'est pas une publication, mais lorsque vous cliquez sur un linkbutton un postpack se produit et c'est la raison pour laquelle gridview ne pas afficher lorsque vous cliquez sur le linkbutton.
ajoutez le code suivant(en plus d'autre partie de votre si le code) pour montrer gridview lorsque vous cliquez sur lnkButton
Il sera un bon choix à utiliser CommandName propriété pour la linkbutton sur le contrôle Gridview et de lui donner un nom spécifique et dans le fichier de code et exactement dans RowCommand événement de votre GridView comme suit dans le présent exemple :
premier voici la .fichier aspx :
et voici le code de la mise en œuvre de mon illustration :
J'espère que cela vous aide dans votre question et je vous souhaite une bonne journée 🙂 !!
Tout d'abord, votre GridView sera créé lors de l'appel de
GenateGridView
méthode, de sorte que vous devez appeler cette méthode à chaque fois que vous postez un dos, puis votre Page_Load devrait êtreDeuxièmement, je voudrais vous présenter l'autre façon d'ajouter de la LinkButton à GridView dynamiquement.
J'ai modifié votre GenateGridView juste ajouter seulement de l'étiquette dans DynamicTemplate, également ajouter cette ligne
gvDynamicArticle.RowDataBound += new GridViewRowEventHandler(gvDynamicArticle_RowDataBound);
pour gérer l'ajout LinkButton.J'en œuvre de ce genre dans RowDataBound gestionnaire d'événement de la GridView pour ajouter LinkButton et masquer l'Étiquette qui nous avons ajouté avant:
Vous pouvez également définir une valeur pour CommandArgument de LinkButton, alors vous pouvez l'afficher dans l'alerte.
Final, il semble que vous voulez montrer un peu de valeur dans l'alerte, vous pouvez code comme ceci