2014-09-17 2 views
0

У меня есть GridView, содержащий два текстовых поля, и я хочу вставить значение TextBox1 в TextBox2, используя только JavaScript. Я использую ASP.Net C#Вставка текстового поля GridView в другое текстовое поле

Вот мой ASPX Код:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<script type="text/javascript"> 
    function cal(t1, t2) { 
     document.getElementById(t2).value = document.getElementById(t1).value; 
    } 
</script> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None"> 
    <Columns> 
     <asp:TemplateField HeaderText="Header1"> 
      <ItemTemplate> 
       <asp:TextBox ID="TextBox1" runat="server" onkeypress="cal('MainContent_TextBox1','MainContent_TextBox2')" 
       onkeyup="cal('MainContent_TextBox1','MainContent_TextBox2')" onselect="cal('MainContent_TextBox1','MainContent_TextBox2')"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Header2"> 
      <ItemTemplate> 
       <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowDeleteButton="True" /> 
    </Columns> 
    <FooterStyle BackColor="#507CD1" 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> 
</asp:Content> 

Я использую этот код, но это не работает.

+0

Проверьте мой ответ ... –

ответ

2

Попробуйте это

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      TextBox textBox1 = (TextBox)e.Row.FindControl("TextBox1"); 
      TextBox textBox2 = (TextBox)e.Row.FindControl("TextBox2"); 
      textBox1.Attributes.Add("onkeyup", "cal('" + textBox1.ClientID + "','" + textBox2.ClientID + "')"); 
      textBox1.Attributes.Add("onkeypress", "cal('" + textBox1.ClientID + "','" + textBox2.ClientID + "')"); 

     } 
    } 

RowDataBound добавить событие Для GridView

OnRowDataBound="GridView1_RowDataBound" 

и использовать этот Javascript

<script type="text/javascript"> 
     function cal(t1, t2) { 
      document.getElementById(t2).value = document.getElementById(t1).value; 
     } 
</script> 
+0

Возможно ли это только на JavaScript? Почему мы используем GridView1_RowDataBound. – user3834541

+0

да это только в javascript.RowDataBound Просто добавьте событие в элементы управления во время выполнения. –

+0

@Ganesh_Devlekar: Я уже опубликовал этот ответ. Что уникально в вашем ответе? –

1

В OnRowDataBound случае вашего GridView, вы можете сделать что-то вроде этого -

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     TextBox textBox1 = (TextBox)e.Row.FindControl("TextBox1"); 
     TextBox textBox2 = (TextBox)e.Row.FindControl("TextBox2"); 
     textBox1.Attributes.Add("onkeyup", "cal('" + textBox1.ClientID + "','" + textBox2.ClientID + "')"); 
     textBox1.Attributes.Add("onkeypress", "cal('" + textBox1.ClientID + "','" + textBox2.ClientID + "')"); 
    } 
} 

и удалить атрибут из текстового поля в ItemTemplate из GridView.

<asp:TemplateField HeaderText="Header1"> 
    <ItemTemplate> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

, как я могу это надеть на JavaScript? – user3834541

+0

@ user3834541: Используя вышеприведенный код, ваша функция cal вызовет для всех текстовых полей в gridview. См. Мой измененный ответ ... Измените свой код в соответствии с ответом –

+0

Он дает ошибку «Имя« onkeyup »не существует в текущем контексте» в «textBox1.Attributes.Add (onkeyup,« cal («+ textBox1») .ClientID + "','" + textBox2.ClientID + "')"); " линия. – user3834541

Смежные вопросы