【发布时间】:2011-10-22 00:18:27
【问题描述】:
我正在使用 ASP.NET 创建一个带有 GridView 的页面,该页面对于最终用户来说是非常可编辑的。基本上,所有行都包含用户可以随时编辑的文本框(而不是静态文本)。除非他单击页面底部的“保存”按钮,否则不会发生回发。然后,我遍历网格中的每一行,检索每一行的控件中的值并将它们保存回数据库。
我现在正在尝试在 Javascript 中实现交换两行(向上或向下移动一行),为此我需要一些方法来检索表中的前一行和下一行。
目前,我的 GridView 包含一个 HiddenField 作为第一列,其中包含数据项的唯一 ID(我当然需要它来将其存储回数据库)。出于其他目的(删除一行)我已经想出了如何检索这个 Id,它是这样的:
var itemHf = $(this).parent().parent().parent().find(':input');
有如此多的“父”调用,因为这发生在图像的单击事件中,该事件位于链接按钮内,位于网格的最后一列内。所以第一个父级是 LinkButton,下一个是表格单元格,最后是表格行。然后,我假设 find(':input') 函数返回该行中的第一个输入元素(在我的例子中是包含 id 的隐藏字段)。
所以,使用相同的方法我可以得到 current 行:
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);
});
});
【问题讨论】:
-
如果您发布一些相应的 HTML 将会非常有帮助...
-
@Tomm 我发布了 ASP.NET(现在无法访问呈现的 html)以及我如何使用 jQuery。希望能帮助到你。我现在已经设法获取下一行和上一行,但现在我还需要检索该行上的下一个输入元素。我只找到第一个,但之后还有两个(当然不在同一列中,正如您从 asp.net 中看到的那样,所以我想我必须搜索开始'一个父母'?)跨度>
标签: javascript jquery asp.net html-table row