Получение индекса вида сетки при нажатии на гиперссылку - PullRequest
2 голосов
/ 15 апреля 2009

У меня есть веб-приложение (ASP.NET 2.0 с использованием C #), над которым я работаю. В нем у меня есть вид сетки с полем гиперссылки на странице (My_Page.aspx). При щелчке по полю гиперссылки на той же странице отображаются подробности.

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

Я хочу знать, как найти индекс строки, в которой была нажата гиперссылка, потому что я хочу изменить ее стиль, чтобы пользователь знал, какая строка была нажата.

ИЛИ

Как бы я изменил его стиль, когда пользователь нажимает гиперссылку в виде сетки.

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2009

В вашем примере "index" или, вернее, "id" гиперссылки, по которой вы щелкнули, будет в Request.QueryString ["id"]

Вы можете сравнить идентификатор из строки запроса с идентификатором строки, к которой вы привязываете событие RowDataBound.

В качестве альтернативы вы можете использовать <% # DataBinder.Eval%> в aspx, чтобы установить стиль на основе поля идентификатора и строки запроса.

РЕДАКТИРОВАТЬ: Пример кода, попробуйте добавить это к вашему коду позади.

    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");
            }
        }
    }
0 голосов
/ 19 мая 2013

Это пример, который при выборе строки в дочернем узле 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';
}
...