2014-11-05 4 views
2

У меня есть GridView с текстовыми полями внутри, по одному для каждой строки. Мне нужно изменить атрибут «onkeypress» для проверки ключей.(ASP.NET) Изменение атрибутов TextBoxes (onkeypress) в GridView

<asp:Table runat="server"> 
<asp:TableRow runat="server"> 
    <asp:TableCell runat="server"> 
    <asp:GridView ID="gridview_1" DataSourceID="SqlDataSource3" AutoGenerateColumns="false" runat="server"> 
     <Columns> 
     <asp:TemplateField HeaderText="textbox"> 
      <ItemTemplate> 
      <asp:TextBox ID="textbox_1" CssClass="textbox_1" runat="server" Text='<%# Eval("sql_textbox")%>'> 
      </asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
    </asp:TableCell> 
</asp:TableRow> 

А в коде позади:

foreach (GridViewRow row in gridview_1.Rows) 
{ 
    TextBox txtbox = ((TextBox)gridview_1.Rows[row.RowIndex].FindControl("textbox_1")); 
    txtbox.Attributes.Add("onkeypress","javascript:return validateFloatKeyPress(this, event);"); 
} 

Но когда Textboxes генерируются, то JavaScript не работает. Зачем?

Я не могу сделать это в части ASP, потому что я хочу, чтобы текстовые поля имели разные методы JavaScript с предложением «if» в коде позади.

спасибо.

+0

вы получаете любую ошибку консоли для вашей функции JS? – Pranav

+0

Нет, я не, но если я поместил свою js-функцию в asp: TextBox с onkeypress = "javascript: return validateFloatKeyPress (this, event);" он работает правильно. – andresfm

+0

Я бы посмотрел на событие «RowDataBound» (в соответствии с ответом от @andresfm), но могу ли я спросить, почему вы выполняете 'gridview1.Rows [row.RowIndex]', когда это возвращает то же самое, что и «строка»? – freefaller

ответ

0

Я положил asp: GridView атрибут onrowdatabound = "GridView1_RowDataBound" и, кажется, работает правильно. В коде позади, я поставил ...

<asp:GridView ID="gridview_1" DataSourceID="SqlDataSource3" AutoGenerateColumns="false" onrowdatabound="GridView1_RowDataBound" runat="server"> 

В коде позади:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.DataItem != null) 
    { 
     TextBox textBox1 = e.Row.FindControl("textbox_1") as TextBox; 
     textBox1.Attributes.Add("onkeypress","javascript:return validateFloatKeyPress(this, event);"); 
    } 
} 

И это работает правильно, я думаю :)