Member 7969814 Ответов: 1

Как получить gridview rowindex при нажатии клавиши enter, когда у него есть текстовое поле в itemtemplate


Привет Друзья я использую asp.net 4.0 я сделал редактируемое представление сетки, поместив текстовое поле в шаблон элемента, я хочу знать, как получить текущий индекс строки представления сетки при нажатии клавиши enter в любом текстовом поле шаблона элемента. пожалуйста, помогите мне.

Что я уже пробовал:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" OnRowDeleting="GridView2_RowDeleting">
                            <AlternatingRowStyle BackColor="Gainsboro" />
                            <Columns>
                                <asp:CommandField ButtonType="Image" DeleteImageUrl="~/img/Cancel (2).png" ShowDeleteButton="True" />
                                <asp:TemplateField HeaderText="Source" SortExpression="Source">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Panel ID="Panel7" runat="server" DefaultButton="BtnSourceLov">
                                            <asp:TextBox ID="txtSource" runat="server" text='<%# Eval("Source")%>' BackColor="#66CCFF" ReadOnly="True" ></asp:TextBox>
                                            <asp:Button ID="BtnSourceLov" runat="server" Text="Button" CssClass="Hide" OnClick="BtnSourceLov_Click" />
                                        </asp:Panel>
                                        
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Destination" SortExpression="Destination">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtDestination" runat="server"  text='<%# Eval("Destination")%>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Qty">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox3" runat="server"  ></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtQty" runat="server" Width="70px"  text='<%# Eval("Qty")%>' ></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="FreightBasis">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtFreightBasis" runat="server" Width="70px" text='<%# Eval("FreightBasis")%>'  ></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="VehicleType">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtVehicleType" runat="server" text='<%# Eval("VehicleType")%>' ></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Dist_In_Kms">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtKms" runat="server" Width="70px" text='<%# Eval("Dist_In_Kms")%>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Lead_Hours">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtLeadHour" runat="server" Width="70px" text='<%# Eval("Lead_Hours")%>' ></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Remarks">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Panel ID="Panel5" runat="server" DefaultButton="BtnAddNewRow">
                                             <asp:Button ID="BtnAddNewRow" runat="server" Text="Button" CssClass="Hide" OnClick="BtnAddNewRow_Click" />
                                            <asp:TextBox ID="txtRemark" runat="server" text='<%# Eval("Remarks")%>'></asp:TextBox>
                                        </asp:Panel>
                                              
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
                            <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
                            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
                            <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                            <SortedAscendingCellStyle BackColor="#F1F1F1" />
                            <SortedAscendingHeaderStyle BackColor="#0000A9" />
                            <SortedDescendingCellStyle BackColor="#CAC9C9" />
                            <SortedDescendingHeaderStyle BackColor="#000065" />
                        </asp:GridView>

1 Ответов

Рейтинг:
5

Sheila Pontes

Привет,

Чтобы решить вашу проблему, давайте использовать javascript с c#:

В html коде введите javascript ниже в вашем коде голова метка.
Этот код срабатывает при нажатии клавиши в текстовом поле.

Код javascript найдет элемент текстового поля,сохранит значение и запустит кнопку в коде C#.

<script type="text/javascript">
        function KeyPressText(id_row, text, button)
        {
            document.getElementById(text).value = id_row;
            document.getElementById(button).click();
        }

    </script>


Под вашим gridview добавьте два элемента: 1 текстовое поле и 1 кнопку. Этот компонент останется скрытым на Вашей странице.
<asp:TextBox ID="txtIndexRow" runat="server" style="visibility:hidden;"></asp:TextBox> 
        <asp:Button ID="btnOcIndex" runat="server" Text="FindRow" OnClick="btnOcIndex_Click" style="visibility:hidden;"/>


Создать Функция onclick событие для вашей скрытой кнопки и добавьте код, где вы читаете индекс сетки.
protected void btnOcIndex_Click(object sender, EventArgs e)
{
  string indexrow = this.txtIndexRow.Text;
}


В вашей сетке добавьте OnRowCreated событие и добавьте код ниже.
Этот код добавляет атрибут onkeypress в текстовом поле вызывается функция javascript для каждой строки сетки.
protected void grd_result_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowIndex > -1)
            {
                ((TextBox)e.Row.FindControl("TextBox1")).Attributes["onkeypress"] = "KeyPressText('" + e.Row.RowIndex.ToString() + "', '" + txtIndexRow.ClientID + "', '" + this.btnOcIndex.ClientID + "');";
            }
        }


Вот! Полный код.

страница ASPX
<head runat="server">
    <title></title>

    <script type="text/javascript">
        function KeyPressText(id_row, text, button)
        {
            document.getElementById(text).value = id_row;
            document.getElementById(button).click();
        }

    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="grd_result" OnRowCreated="grd_result_RowCreated">
            <Columns>
                
                <asp:TemplateField HeaderText="Destination">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:TextBox ID="txtIndexRow" runat="server" style="visibility:hidden;"></asp:TextBox> 
        <asp:Button ID="btnOcIndex" runat="server" Text="FindRow" OnClick="btnOcIndex_Click" style="visibility:hidden;"/>
           
    </div>
    <br />
       
    </form>
</body>


С фоновым кодом
protected void grd_result_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowIndex > -1)
            {
                ((TextBox)e.Row.FindControl("TextBox1")).Attributes["onkeypress"] = "KeyPressText('" + e.Row.RowIndex.ToString() + "', '" + txtIndexRow.ClientID + "', '" + this.btnOcIndex.ClientID + "');";
            }

        }

        protected void btnOcIndex_Click(object sender, EventArgs e)
        {
            string indexrow = this.txtIndexRow.Text;
        }


Member 7969814

Это решение очень полезно, я сделал небольшое изменение в функции java-script, и оно отлично работает для меня

функция KeyPressText1(id_row, text) {

document.getElementById(text). value = id_row;
}

Большое спасибо, что спасли мне жизнь.

Sheila Pontes

Я рад вам помочь.

Karthik_Mahalingam

5