2009-04-15 4 views
2

J'ai une application Web (ASP.NET 2.0 utilisant C#) sur laquelle je travaille. Dans celui-ci, j'ai un gridview avec un hyperlinkfield sur une page (My_Page.aspx). Lorsque le lien hypertexte est cliqué, il affiche les détails sur la même page.Obtenir l'index d'un gridview quand on clique sur hyperlinkfield

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

Je veux savoir comment trouver l'indice de la ligne dans laquelle le lien hypertexte est cliqué, parce que je veux changer son style, de sorte que l'utilisateur sait quelle ligne a été cliqué.

OU

Comment pourrais-je changer le style de celui-ci lorsque l'utilisateur clique sur le lien hypertexte dans gridview.

Merci.

Répondre

1

Dans votre exemple, le « index » ou plutôt « id » du lien qui a été cliqué sera en Request.QueryString [ « id »]

Vous pouvez comparer l'ID de la chaîne de requête avec l'ID la ligne à laquelle vous vous liez dans l'événement RowDataBound.

Vous pouvez également utiliser un <% # DataBinder.Eval%> dans votre aspx pour définir le style en fonction du champ ID et de la chaîne de requête.

EDIT: Exemple de code, essayez d'ajouter ceci à votre code.

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

Il est un échantillon lorsque vous sélectionnez une ligne sur l'enfant Gridview du noeud sélectionné sont présentées dans la même 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" /> 

Jav aScript

function ChangeSelectedRow(sender) 
{ 
    if (SelectedRow != null) 
     SelectedRow.style.backgroundColor = OriginalColor; 
    SelectedRow = sender.parentElement.parentElement; 
    OriginalColor = SelectedRow.style.backgroundColor; 
    SelectedRow.style.backgroundColor = 'red'; 
} 
Questions connexes