2013-01-08 2 views
2

J'utilise un gridview que je veux pouvoir cliquer sur chaque ligne pour pouvoir afficher un autre champ de l'objet que j'affiche. Il se sent comme il est facile à résoudre, mais peut-être que je suis stupide parce que je ne peux pas le trouver nulle part ...Gridview utilisant l'événement Boundfield onclick

Le code ASP:

<asp:GridView ID="gvMessages" runat="server" AutoGenerateColumns = "false" 
    CaptionAlign="NotSet" CellPadding="5"> 
    <Columns> 
     <asp:BoundField HeaderText="Avsändare" DataField="Sender" /> 
     <asp:BoundField HeaderText="Ämne" DataField="Head" /> 
    </Columns> 
</asp:GridView> 

code-behind:

protected void Page_Load(object sender, EventArgs e) 
    { 
     gvMessages.DataSource = con.GetMails(con.GetId(Membership.GetUser().UserName)); 
     gvMessages.DataBind(); 
    } 

je ne sais pas que tout cela est necessery pour le problème mais voici la méthode dans mon WCF-projet qui remplit ma classe composite avec des informations d'objet

public List<MailInfo> GetMails(int id) 
    { 
     using (var client = new datingEntities()) 
     { 
      var result = client.Mail.Where(x => x.SentTo == id).Select(x => new MailInfo 
      { 
       Message = x.Mail1, 
       Reciever = x.SentTo, 
       Read = (bool)x.IsRead, 
       Sender = (int)x.SentFrom, 
       Head = x.Subject 
      }).ToList(); 
      return result; 
     } 
    } 

classe Composite:

[DataContract] 
public class MailInfo : Mail 
{ 
    [DataMember] 
    public string Message { get; set; } 
    [DataMember] 
    public int Reciever { get; set; } 
    [DataMember] 
    public bool Read { get; set; } 
    [DataMember] 
    public int Sender { get; set; } 
    [DataMember] 
    public string Head { get; set; } 
} 
+0

Vous ne pouvez pas _find_ quoi? Notez que vous ne devriez pas utiliser la commande 'GridView'' if (! Page.IsPostBack) '. –

+0

reliez-vous à l'événement select row? – briskovich

Répondre

3

Vous devriez DataBind le GridView ne if(!Page.IsPostBack).

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     gvMessages.DataSource = con.GetMails(con.GetId(Membership.GetUser().UserName)); 
     gvMessages.DataBind(); 
    } 
} 

Si vous souhaitez sélectionner une ligne sur un clic vous pouvez utiliser javascript:

protected void gvMessages_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) { 
     e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';"; 
     e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';"; 
     e.Row.ToolTip = "Click to select row"; 
     e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.GridView1, "Select$" + e.Row.RowIndex); 
    } 
} 

vous pouvez maintenant gérer la SelectedIndexChangedEvent chaque fois que l'utilisateur clique sur la ligne:

protected void gvMessages_SelectedIndexChanged(Object sender, EventArgs e) 
{ 
    // Get the currently selected row using the SelectedRow property. 
    GridViewRow row = CustomersGridView.SelectedRow; 
} 
1

Vous devez utiliser l'événement OnSelectedIndexChanged. Ensuite, dans la définition de l'événement, vous pouvez récupérer l'élément sélectionné et faire ce dont vous avez besoin à partir de là.

protected void gvMessages_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ContactsGridView.SelectedIndex >= 0) 
     ViewState["SelectedKey"] = gvMessages.SelectedValue; 
    else 
     ViewState["SelectedKey"] = null; 
} 

Exemple provenant du MSDN official documentation.

Questions connexes