单击超链接字段时获取gridview的索引

时间:2009-04-15 17:22:36

标签: c# asp.net gridview coding-style detailsview

我正在使用一个Web应用程序(使用C#的ASP.NET 2.0)。在其中,我有一个gridview,页面上有一个超链接字段(My_Page.aspx)。单击“超链接”时,它会在同一页面上显示详细信息。

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

我想知道如何查找单击超链接的行的索引,因为我想更改其样式,以便用户知道单击了哪一行。

OR

当用户单击gridview中的超链接时,如何更改它的样式。

谢谢。

2 个答案:

答案 0 :(得分:1)

在您的示例中,单击的超链接的“索引”或“id”将位于Request.QueryString [“id”]

您可以将查询字符串中的ID与您在RowDataBound事件中绑定的行的ID进行比较。

或者您可以使用&lt;%#DataBinder.Eval%&gt;在您的aspx中根据ID字段和查询字符串设置样式。

编辑:代码示例,尝试将此添加到您的代码后面。

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

答案 1 :(得分:0)

这是一个示例,当您在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>

数据源

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