2015-09-29 1 views
0

Таблицы на сайте, который я использую, создаются ретрансляторами, поэтому я не знаю, как их идентифицировать после создания страницы. Мне нужно иметь возможность выбирать строку на основе нажатия кнопки из ячейки в этой строке.Есть ли эквивалент функции Javascript .closest() в .net?

Для этого есть функция Javascript, но я хотел бы реплицировать в .net (C#);

currentRow = $(evt).closest("tr"); 

Таблица генерируется следующим образом; (последний столбец, содержащий кнопку «скрыть»)

<asp:Repeater ID="StoredProcedureRepeater" runat="server"> 

        <ItemTemplate> 

         <tr ID="HideMe" class="NotHidden" runat="Server"> 
          <td style="width: 300px" runat="server"> 
           <asp:HyperLink runat="server" Text='<%# StoredProcedure.Caption %>' NavigateUrl='<%# Url.StoredProcedure(StoredProcedure) %>' /> 
          </td> 
          <td runat="server"> 
           <%# StoredProcedure.Description %> 
          </td> 
          <td runat="server"> 
           <asp:HyperLink ID="EditProcedure" runat="server" Text='edit' NavigateUrl='<%# Url.EditProcedure(StoredProcedure) %>' /> 
          </td> 
          <td id="HideBtn"> 
           <asp:button ID="HideUnhide" runat="server" image="../images/collapse.png" onclick="Hide_Unhide"/> 
          </td> 
         </tr> 

        </ItemTemplate> 

       </asp:Repeater> 

За кодом для ретранслятора; (Таким образом, для ясности, этот повторитель создается в то время как в другой.)

private void SchemaRepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
    { 
     Schema = (Schema)e.Item.DataItem; 

     var storedProcedureRepeater = (Repeater)e.Item.FindControl("StoredProcedureRepeater"); 

     storedProcedureRepeater.ItemCreated += StoredProcedureRepeater_ItemCreated; 
     storedProcedureRepeater.DataSource = _schemaStoredProcedures[Schema]; 
     storedProcedureRepeater.DataBind(); 
    } 
private void PriorityProcedureRepeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
    { 
     StoredProcedure = (StoredProcedure)e.Item.DataItem; 
    } 
+0

Я уверен, вы использовать WebForms, показать код, который отображает таблицу –

ответ

0

Так как вы сказали, что вы хотите, чтобы повторить это в C#, я полагаю, вы имеете в виду вы хотите сделать это на стороне сервера.

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

<asp:Repeater runat="server" OnItemCommand="MyRepeater_ItemCommand" ... /> 

Затем в вашем коде вы определяете обработчик событий.

protected void MyRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e) 
{ 
} 

В RepeaterCommandEventArgs содержит информацию о строке, вызвавшем событие, в том числе элемента данных, который был использован для построения строки. Если вы построили свой ретранслятор офф списка, то ваш обработчик события будет выглядеть примерно так:

protected void MyRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e) 
{ 
    var dataItem = (Widget)e.Item.DataItem; // <-- this is the dataitem for the row 
    int dateItemID = dataItem.ID; // You can access the properties on your data item to "do stuff" 
} 
+0

Это кажется, что это может быть полезно. Хотя я могу видеть только идентификатор самого ретранслятора, я не вижу строку, на которую была нажата кнопка (я использую быстрый просмотр). DataItem на самом деле является нулевым. – beatsandbosons

+0

Как вы связываете ретранслятор? – DVK

+0

Это немного надуманное. Я сам не писал оригинал (типичный). Я добавлю к основному вопросу ... – beatsandbosons

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