Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gridview using Boundfield onclick event

I'm using a gridview that I want to be able to click on each row to be able to display another field from the object that I'm displaying. It feels like it's easy to solve but maybe I'm stupid because I can't find it anywhere...

The ASP-code:

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

Not sure that all this is necessery for the problem but here is the method in my wcf-project that is filling my composite class with object info

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

Composite-class:

[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; }
}
like image 516
MrProgram Avatar asked Dec 07 '25 21:12

MrProgram


1 Answers

You should databind the GridView only 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();
    }
}

If you want to select a row on click you can use 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);
    }
}

Now you can handle the SelectedIndexChangedEvent whenever the user clicks somewhere in the row:

protected void gvMessages_SelectedIndexChanged(Object sender, EventArgs e)
{
    // Get the currently selected row using the SelectedRow property.
    GridViewRow row = CustomersGridView.SelectedRow;
}
like image 66
Tim Schmelter Avatar answered Dec 10 '25 18:12

Tim Schmelter



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!