【问题标题】:Get selected rowIndex of gridview using javascript使用javascript获取gridview的选定rowIndex
【发布时间】:2015-02-01 17:08:54
【问题描述】:

我想从gridview 中获取选定的rowindex。在gridview 中有5 列IDnamemodelcodeamount。它还包含一个图像,单击它会打开一个弹出窗口,我可以通过它在IDnamemodelcode 中分配值。问题是单击图像并在弹出窗口中选择行后,我无法在每行中分配正确的值。 为此,我需要获取单击图像的选定索引。

这里是gridview代码。

<asp:GridView ID="grvSalesDetails" runat="server" AutoGenerateColumns="False" CellPadding="4"
    CssClass="mGrid" ForeColor="#333333" GridLines="None" OnRowDeleting="grvSalesDetails_RowDeleting"
    ShowFooter="True" Style="text-align: left" Width="100%" SelectedRowStyle="myselection">
    <Columns>
        <asp:BoundField DataField="RowNumber" HeaderText="SNo" />
        <asp:TemplateField HeaderText="Machine ID">
            <ItemTemplate>
                <asp:TextBox ID="txtMID" runat="server" Width="30px"></asp:TextBox>
                <img class="style1" alt="" src="../Inventory/Images/BrowseIcon.jpg" onclick="SelectMachineCode(this)"
                    id="imgMachine" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name">
            <ItemTemplate>
                <asp:TextBox ID="txtMName" runat="server" Width="120px"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Model">
            <ItemTemplate>
                <asp:TextBox ID="txtMModel" runat="server" Width="80px"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Code">
            <ItemTemplate>
                <asp:TextBox ID="txtMCode" runat="server" Width="70px"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Amount">
            <ItemTemplate>
                <asp:TextBox ID="txtMAmount" runat="server" Width="90px"></asp:TextBox>
            </ItemTemplate>
            <FooterStyle HorizontalAlign="Right" />
            <FooterTemplate>
                <asp:Button ID="AddNewRow" runat="server" CssClass="btnSearch" OnClick="AddNewRow_Click"
                    Text="Add New Row" />
            </FooterTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowDeleteButton="True" />
    </Columns>
    <FooterStyle BackColor="#102040" CssClass="mGrid" Font-Bold="True" ForeColor="White" />
    <RowStyle BackColor="#EFF3FB" />
    <EditRowStyle BackColor="#2461BF" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <AlternatingRowStyle BackColor="White" />
</asp:GridView>

这是javascript

<script type="text/javascript">
var popup;
function SelectMachineCode() {
    var grvSalesDetails = document.getElementById('<%=grvSalesDetails.ClientID%>');
    popup = window.open("machine_lookup.aspx", "Popup", "width=600,height=300");
    popup.focus();
}

function OpenMachineLookUp() {
    var _PageUrl = "machine_lookup.aspx";
    OpenNewWindow(_PageUrl, "Machine Information", "800", "500");
}

function LookUpMachineValues(ID, Name, Model, Code, Usage, Description) {
    var grvSalesDetails = document.getElementById('<%=grvSalesDetails.ClientID%>');            
    var rowId=;//selected rowindex here            

        var MID = grvSalesDetails.rows[rowId].cells[1].children[0];
        MID.value = ID;
        var MName = grvSalesDetails.rows[rowId].cells[2].children[0];
        MName.value = Name;
        var MModel = grvSalesDetails.rows[rowId].cells[3].children[0];
        MModel.value = Model;
        var MCode = grvSalesDetails.rows[rowId].cells[4].children[0];
        MCode.value = Code;           
}

我尝试使用hiddenfieldsparentnodechildnode,但无法获得选定的rowindex

【问题讨论】:

    标签: javascript c# asp.net gridview


    【解决方案1】:

    我有一种方法可以在单击图像时获取 rowindexgridview

    <ItemTemplate>
        <asp:TextBox ID="txtMID" runat="server" Width="30px"></asp:TextBox>
        <img class="style1" alt="" src="../Inventory/Images/BrowseIcon.jpg" onclick="SelectMachineCode(this)"
            id="imgMachine" />                                                               
    </ItemTemplate>
    

    通过将行的属性传递给javascript function 并将索引存储在hiddenValueField 中,我能够解决问题。

    <script type="text/javascript">
        var popup;
        function SelectMachineCode(row) {
            var rowData = row.parentNode.parentNode;
            var rowIndex = rowData.rowIndex;
            document.getElementById("<%=hdValue.ClientID %>").value = rowIndex;
            popup = window.open("/Machinery/lookup/machine_lookup.aspx", "Popup", "width=800");
            popup.focus();
        }
        function LookUpMachineValues(ID, Name, Model, Code, Usage, Description) {
            var grvSalesDetails = document.getElementById('<%=grvSalesDetails.ClientID%>');
            var rowIndexs = document.getElementById("<%=hdValue.ClientID %>").value;
            var ri = parseInt(rowIndexs);
            var MID = grvSalesDetails.rows[ri].cells[1].children[0];
            MID.value = ID;
            var MName = grvSalesDetails.rows[ri].cells[2].children[0];
            MName.value = Name;
            var MModel = grvSalesDetails.rows[ri].cells[3].children[0];
            MModel.value = Model;
            var MCode = grvSalesDetails.rows[ri].cells[4].children[0];
            MCode.value = Code;
        }
    </script>
    

    【讨论】:

      【解决方案2】:

      TFrost 的解决方案有效,但结果不一致,取决于是否显示分页器和/或标题控件。

      假设您显示了一个标题和一个寻呼机控件,然后单击第一个数据行。 JavaScript 将返回 2(0 是页面行,1 是标题)。

      但是,如果您的数据集小于页面大小,或者您根本没有分页器控件怎么办?在这种情况下,分页器控件将不会显示,并且当您单击第一个数据行时,JavaScript 将返回 1。

      如果分页器和页眉都关闭,当您单击第一个数据行时,JavaScript 将返回 0。

      我最终使用的方法是在网格视图中将主键(即唯一整数)作为单独的列。然后将此数字保存在 JavaScript 中的隐藏变量中。然后在代码隐藏中,您通过 GridView 行进行迭代,并将该列的值与隐藏变量中存储的数字进行比较。找到匹配项后,这是您选择的行。

      【讨论】:

        猜你喜欢
        • 2012-04-01
        • 2011-04-18
        • 2013-06-20
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 2011-11-13
        相关资源
        最近更新 更多