Я использую ASP.NET для создания страницы с GridView, которая очень редактируема для конечного пользователя.По сути, все строки содержат текстовые поля (вместо статического текста), которые пользователь может редактировать в любое время.Никакой обратной передачи не происходит, за исключением случаев, когда он нажимает кнопку «Сохранить» внизу страницы.Затем я перебираю каждую строку в сетке, извлекаю значения в элементах управления в каждой строке и сохраняю их обратно в базу данных.
Сейчас я пытаюсь осуществить свопинг двух строк (чтобы переместить строку вверх иливниз) в Javascript, и для этого мне нужен какой-то способ извлечения предыдущей и следующей строк в таблице.
На данный момент мой GridView содержит HiddenField в качестве первого столбца, который содержит уникальный идентификатор данныхпункт (мне нужно это, чтобы сохранить его обратно в базу данных, конечно).Для других целей (удаление строки) я выяснил, как получить этот идентификатор, а именно:
var itemHf = $(this).parent().parent().parent().find(':input');
Существует так много «родительских» вызовов, потому что это происходит в событии click изображения, котороенаходится внутри LinkButton, которая находится внутри последнего столбца моей сетки.Таким образом, первый родительский элемент - LinkButton, следующий - ячейка таблицы и, наконец, строка таблицы.Затем, я полагаю, функция find(':input')
возвращает первый элемент ввода в этой строке (который в моем случае является скрытым полем, содержащим идентификатор).
Итак, используя тот же метод, я могу получить current row:
var row = $(this).parent().parent().parent();
Но как мне получить предыдущие и следующие строки?
Кроме того, как только у меня будут эти строки, мне нужно будет извлечь значения из большего количества вводаэлементы.Я знаю, что могу найти первый, используя find(':input')
, но как мне найти второй и третий элементы ввода в этой строке таблицы?
РЕДАКТИРОВАТЬ
В настоящее время у меня нет htmlно вот разметка ASP.NET для сетки:
<asp:GridView runat="server" ID="grid" AutoGenerateColumns="False"
onrowcommand="grid_RowCommand" onrowdeleting="grid_RowDeleting">
<Columns>
<!-- Move Up button -->
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" OnClientClick="return false;">
<asp:Image ImageUrl="~/Images/moveUp.png" AlternateText="moveUp" runat="server" CssClass="moveUp" ID="moveUp" />
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<!-- Move Down button -->
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" OnClientClick="return false;">
<asp:Image ImageUrl="~/Images/moveDown.png" AlternateText="moveDown" runat="server" CssClass="moveDown" ID="moveDown" />
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<!-- ID Hidden Field -->
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Id") %>' />
</ItemTemplate>
</asp:TemplateField>
<!-- Name textbox field -->
<asp:TemplateField HeaderText="Naam">
<ItemTemplate>
<asp:TextBox runat="server" Width="200px" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' />
</ItemTemplate>
</asp:TemplateField>
<!-- Price textbox field -->
<asp:TemplateField HeaderText="Prijs">
<ItemTemplate>
<asp:TextBox runat="server" Width="50px" Text='<%# DataBinder.Eval(Container.DataItem, "Price") %>' />
</ItemTemplate>
</asp:TemplateField>
<!-- Delete button -->
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" OnClientClick="return false;">
<asp:Image ImageUrl="~/Images/delete.png" AlternateText="delete" runat="server" CssClass="delete" ID="delete" />
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
А вот пример использования jQuery:
$(document).ready(function () {
$('table td img.delete').click(function () {
var id = $(this).closest('tr').find(':input').val();
alert(id);
});
});