Question

I have a web app(ASP.NET 2.0 using C#) that I am working on. In it, I have a gridview with a hyperlinkfield on a page(My_Page.aspx). When the Hyperlinkfield is clicked, it shows details on the same page.

<asp:HyperLinkField DataNavigateUrlFields="ID" 
                    DataNavigateUrlFormatString="My_Page.aspx?id={0}"
                    DataTextField="NAME" 
                    HeaderText="Item1" 
                    SortExpression="NAME" />

I want to know how to find the Index of the row in which the Hyperlink is clicked, because I want to change its style, so that the user knows which row was clicked.

OR

How would I change the style of it when the user clicks hyperlink in the gridview.

Thank you.

Was it helpful?

Solution

In your example, the "index" or rather "id" of the hyperlink that was clicked will be in Request.QueryString["id"]

You could compare the ID from the querystring with the ID of the row you are binding to in the RowDataBound event.

Alternatively you could use a <%# DataBinder.Eval %> in your aspx to set the style based upon the ID field and the query string.

EDIT: Code Sample, try adding this to your code behind.

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if(Request.QueryString["id"] != null &&
                Request.QueryString["id"] == DataBinder.Eval(e.Row.DataItem, "id").ToString())
            {
                e.Row.Style.Add("font-weight", "bold");
            }
        }
    }

OTHER TIPS

It is an sample which when you select a row on Gridview child of selected node are shown in the same gridview:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        LocationIDHiddenField.Value = Request.QueryString["LocationID"];
    }
    if (LocationIDHiddenField.Value != null && LocationIDHiddenField.Value != string.Empty)
        LoadLocationParents();
}

private void LoadLocationParents()
{
    long locationID = Convert.ToInt64(LocationIDHiddenField.Value);
    bool IsCurrent = true;
    HyperLink parent;        
    Label seperator;
    do
    {
        Basic.Location.LocationProperties location = Basic.Location.LocationLoader.GetLocationProperties(locationID);
        parent = new HyperLink();
        seperator = new Label();
        if (!IsCurrent)  
            parent.NavigateUrl = string.Format("LOCATIONLOV.aspx?LocationID={0}", location.LocationID);
        IsCurrent = false;
        parent.Text = location.LocationTitle;
        seperator.Text = "  >  ";
        ParentsPanel.Controls.AddAt(0, parent);
        ParentsPanel.Controls.AddAt(0, seperator);
        locationID = location.ParentID;     
    }
    while (locationID != 0);
    parent = new HyperLink();
    parent.NavigateUrl = "LOCATIONLOV.aspx";
    parent.Text = "upper nodes";
    ParentsPanel.Controls.AddAt(0, parent);
}

GridView

<asp:GridView ID="ChildsGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="LocationID"
                        DataSourceID="ChildsObjectDataSource" Width="570px" AllowPaging="True">
                        <Columns>
                            <asp:TemplateField>
                                <HeaderTemplate>
                                    &nbsp;
                                </HeaderTemplate>
                                <ItemStyle Width="20px" />
                                <ItemTemplate>
                                    <a onclick="if ('<%# Eval("ChildCount") %>' == 'False') return false;" href='<%# Eval("LocationID", "LOCATIONLOV.aspx?LocationID={0}") %>' ><asp:Image  ID="GridLocationLov" runat="server" ToolTip="Expand" SkinID="LOVChilds" /></a> 
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Title" SortExpression="LocationTitleType">
                                <ItemTemplate>
                                    <span class="LOVSelectText" onclick="LOCATIONID = '<%# Eval("LocationID") %>'; LOCATIONTITLE = <%= ConfirmTextBox.ClientID %>.value = '<%# Eval("LocationTitle") %>';ChangeSelectedRow(this);">
                                        <%# Eval("LocationTitleType")%>
                                    </span>
                                </ItemTemplate>
                                <HeaderTemplate>
                                    <asp:Label ID="GridHeadLabel" runat="server" OnLoad="GridHeadLabel_Load"></asp:Label>
                                </HeaderTemplate>
                            </asp:TemplateField>
                        </Columns>
                        <EmptyDataTemplate>
                         NO CHild
                        </EmptyDataTemplate>
                    </asp:GridView>

DataSource

<asp:ObjectDataSource ID="ChildsObjectDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
    SelectMethod="Retrive" TypeName="BASIC.LOCATIONLOV.LOCATIONLOVLoader">
    <SelectParameters>
        <asp:ControlParameter ControlID="LocationIDHiddenField" Name="ParentID" PropertyName="Value"
            Type="Int64" />
        <asp:Parameter DefaultValue="LocationTitle" Name="SortExpression" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>
<asp:HiddenField ID="LocationIDHiddenField" runat="server" />

JavaScript

function ChangeSelectedRow(sender)
{
    if (SelectedRow != null)
        SelectedRow.style.backgroundColor = OriginalColor;
    SelectedRow = sender.parentElement.parentElement;
    OriginalColor = SelectedRow.style.backgroundColor;
    SelectedRow.style.backgroundColor = 'red';
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top