简体   繁体   English

单击按钮时获得行Gridview

[英]get row when button clicked Gridview

I have a Gridview with the first column containing an edit button for each row. 我有一个Gridview ,第一列包含每一行的编辑按钮。 The button on click calls btnEditClick() which is a function in the javascript . 点击按钮会调用btnEditClick() ,它是javascript的函数。 How would I be able to access the row on which the button was clicked so that I can edit the values? 我如何能够访问单击按钮的行,以便可以编辑值? This is what I have so far, 这就是我到目前为止

        var target = event.target || event.srcElement;
        target.id = "btnEdit";
        target.style.display = 'none';

        var cancel = document.getElementById("btnCancel");
        if (cancel != null)
            cancel.click();

        var grid = document.getElementById("gridRoles"); //get gridview
        var row = target.parentElement.parentElement; //doesn't work

        var hdn = document.createElement("input");
        hdn.type = "hidden";
        hdn.id = "hdnId";
        hdn.name = "hdnId";
        hdn.value = row.cells[1].innerHTML.toString();
        row.cells[0].appendChild(hdn);

edit here's my gridview 编辑这是我的gridview

<asp:GridView ID="gridRoles" runat="server" Width="100%" AutoGenerateColumns="False" Font-Names="Arial" PageSize="12"
            Font-Size="11pt" CssClass="textGrid" AlternatingRowStyle-BackColor="#CED8F6" HeaderStyle-BackColor="#F2F2F2"
            AllowPaging="True" OnPageIndexChanged ="IndexChanged" OnPageIndexChanging ="PageChange" OnRowDataBound="gridroles_RowDataBound">
            <Columns>
               <asp:TemplateField HeaderText="Action">
                    <ItemTemplate>
                        <asp:Button ID="btnEdit" runat="server" text="Edit" OnClientClick="btnEditClick()" />
                        <asp:Button ID="btnAdd" runat="server" text="Add" OnClientClick="btnAddClick()" Visible="false"/>
                    </ItemTemplate>
                </asp:TemplateField>
                ...

If your gridview was something like this (html wise): 如果您的gridview是这样的(html明智的话):

<table id="gridRoles">
<tr>
  <th>
    button
  </th>
  <th>
    row
  </th>
</tr>
<tr>
  <td>
    <a href="#" onclick="getRowNumber(event);">row Index</a>
  </td>
  <td>
    row 1
  </td>
</tr>
<tr>
  <td>
    <a href="#" onclick="getRowNumber(event);">row Index</a>
  </td>
  <td>
    row 2
  </td>
</tr>
<tr>
  <td>
    <a href="#" onclick="getRowNumber(event);">row Index</a>
  </td>
  <td>
    row 3
  </td>
</tr>
</table>

Then you could create a function like this: 然后,您可以创建如下函数:

function getRowNumber(event) {
        var target = event.target || event.srcElement;
        target.id = "btnEdit";
        target.style.display = 'none';

        var cancel = document.getElementById("btnCancel");
        if (cancel != null)
            cancel.click();

        //var grid = document.getElementById("gridRoles"); //get gridview
        var row = target.parentElement.parentElement; 

        var hdn = document.createElement("input");
        hdn.type = "hidden";
        hdn.id = "hdnId";
        hdn.name = "hdnId";
        hdn.value = row.cells[1].innerHTML.toString();
        row.cells[0].appendChild(hdn);
}

see my jsfiddle: https://jsfiddle.net/fictus/eqtavvwc/ 看到我的jsfiddle: https ://jsfiddle.net/fictus/eqtavvwc/

You could use the following function to retrieve the table row: 您可以使用以下函数来检索表行:

function findParentRow(child) {
    var ctl = child;
    while (ctl) {
        if (ctl.tagName === 'TR') {
            return ctl;
        }
        ctl = ctl.parentNode;
    }
    return null;
}

And call it like this: 并这样称呼它:

var row = findParentRow(target);

Use $(this).closest('tr'); 使用$(this).closest('tr');

Here's a fiddle , it's not gridview but it should be similar to what you need to do 这是一个小提琴 ,不是gridview,但它应该与您需要执行的操作类似

  $(document).ready(function () {

        $(".btnSave").click(
            function () {
                    var closestTr = $(this).closest('tr');
                console.log(closestTr[0]);
                $('.clickedStuff').append(closestTr[0]);
            }            
        );
    });

Edit, I'm not familer with gridviews honestly, but this should work in principal if you use the right element for closest() 编辑,说实话,我不熟悉gridviews,但是如果您对close()使用正确的元素,则这原则上应该起作用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM