2012-03-16 5 views
1

Я пробовал много комбинаций, чтобы получить rowIndex в нижнем коде, что должно быть написано ниже «ЭТО, ГДЕ Я ХОЧУ ПОЛУЧИТЬ ROWINDEX».Rowindex gridview с помощью Javascript

  <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
       AutoGenerateColumns="False" DataKeyNames="Id,BookName" DataSourceID="SqlDataSource1" 
       Width="800px" CssClass="Gridview"> 
       <Columns> 
        <asp:TemplateField HeaderText="BookName" SortExpression="BookName" ItemStyle-Width="250px"> 
         <ItemTemplate> 
          <asp:HyperLink ID="hlk_Bookname" runat="server" Enabled='<%# !Convert.ToBoolean(Eval("Reserve")) %>' 
           Text='<%# Bind("BookName") %>' NavigateUrl='javascript:doYouWantTo("THIS IS WHERE I WANT TO PASS ROWINDEX ")'></asp:HyperLink> 
         </ItemTemplate>        
        </asp:TemplateField> 

.. .. ..

ответ

1

Вы можете использовать RowDataBound. Свойство row содержит RowIndex

код за

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType==DataControlRowType.DataRow) 
    { 
     ((HyperLink)e.Row.FindControl("hlk_Bookname")) 
     .NavigateUrl=string.Format("javascript:doYouWantTo({0})",e.Row.RowIndex)); 
    } 
} 

ASPX

<asp:gridview id="GridView1" 
     onrowdatabound="GridView1_RowDataBound" 
...... 

Edit

Если есть лучшее решение для вас проблемы. Думаю, вы снова пытаетесь изобрести колесо. Я думаю, вы можете посмотреть на событие RowCommand. Вы можете использовать его в комбинации с RowCreated. Вы можете увидеть пример here. Или вы можете сделать это что-то вроде этого:

код за

protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e) 
{ 
    if(e.CommandName=="Add") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     GridViewRow row = ContactsGridView.Rows[index]; 
     //What ever code you want to do.... 
    } 
} 
//Set the command argument to the row index 
protected void GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton addButton = (LinkButton)e.Row.Cells[0].Controls[0]; 
     addButton.CommandArgument = e.Row.RowIndex.ToString(); 
    } 
} 

ASPX

<asp:gridview id="GridView1" 
       onrowcommand="GridView1_RowCommand" 
       OnRowCreated="GridView1_RowCreated" 
       runat="server"> 

       <columns> 
       <asp:buttonfield buttontype="Link" 
        commandname="Add" 
        text="Add"/> 

Надежда эта помощь ..

+0

Спасибо за ответ, может я спросите, мой подход может быть лучше ?, У меня есть гиперссылки в моем gridview, когда гиперссылки щелкнули, я показываю javascript мне ssage (doYouWantTo, как указано выше), тогда, если да, этот код javascript нажимает невидимую кнопку asp.net для запуска функции aC# для вставки щелкнутой строки в базу данных. Поэтому я попросил вышеуказанный вопрос найти и передать rowindex в функцию C#, do вы думаете, есть ли лучший способ? – HOY

+1

Обновлен ответ – Arion

+0

В качестве альтернативы, если вы хотите написать все это в разметке, вы можете использовать этот синтаксис: 'onclick = '<% #" myFunction ("+ Container.DataItemIndex +") "%>'' – BornToCode

Смежные вопросы