2009-04-15 5 views
2

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

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

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

ИЛИ

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

спасибо.

ответ

1

В вашем примере, «индекс» или, вернее, «идентификатор» гиперссылка, которая была нажата будет Request.QueryString [ «ID»]

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

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

EDIT: Образец кода, попробуйте добавить это в свой код.

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

Это образец, который при выборе строки на Gridview ребенка выбранного узла отображаются в том же 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'; 
} 
Смежные вопросы