2015-12-11 2 views
0

У меня есть GridView, и в одном из этих столбцов есть текстовое поле. Когда это текстовое поле выбрано, он отображает список фрагментов. Когда выбран кусок, мне нужно показать кусок в текстовом поле.Как вызвать текстовое поле, которое находится в GridView

<asp:UpdatePanel ID="udpPieceDetails" UpdateMode="Conditional" runat="server"> 
       <ContentTemplate> 
        <asp:GridView style="width:75%;float:left" 
         ID="gvPieceOutturns" 
         ShowHeaderWhenEmpty="false" 
         CssClass="tblResults" 
         runat="server" 
         OnRowDataBound="gvPieceOutturns_ItemDataBound"        
         DataKeyField="ID" 
         AutoGenerateColumns="false" 
         allowpaging="false" 
         AlternatingRowStyle-BackColor="#EEEEEE"> 
         <HeaderStyle CssClass="tblResultsHeader" /> 
         <Columns> 
          <asp:TemplateField HeaderText="Outturn Pce" SortExpression="OutturnPce"> 
           <ItemTemplate> 
            <a style="float:none;width:16px;height:16px;margin-right:0px;left:0px;top:26px" title="Pick Type from list..." class="iconSearch" id="btnMemShowPieceType"></a> 
            <input type="text" id="txtMemPieceType" class="lookuppopup" onblur="CheckMemPiece(this.value)" style="text-transform:uppercase;width:40px" runat="server"/> 
           </ItemTemplate> 
          </asp:TemplateField>  
         </Columns> 
        </asp:GridView> 
       </ContentTemplate> 
     </asp:UpdatePanel> 

Здесь я пытаюсь заполнить текстовое поле:

function PopulateMemPiece(result) { 
     if (result.ID > 0) { 
      $("#<%= hfPieceType.ClientID %>").val(result.ID); 
      $("#<%= txtMemPieceType.ClientID %>").val(result.Code); 

     } else { 
      $("#<%= hfPieceType.ClientID %>").val(0); 
      $("#<%= txtMemPieceType.ClientID %>").val(""); 
     } 
    } 

Но я получаю эту ошибку:

Error 2586 The name 'txtMemPieceType' does not exist in the current context

ответ

0

бы не

gvPieceOutturns.FindControl("hfPieceType"); 

работу?

Вы также можете попробовать

ClientIDMode="Static" 

на ваших TextBoxes, чтобы использовать JQuery на них.

+0

Если я использую the' FindControl' как я заполнить текстовое поле, когда часть выбрано? – user123456789

+0

Установите его и обновите UpdatePanel, введите tb как AsyncPostBackTrigger. Также вам может потребоваться установить AutoPostBack в TextBox. –

0

Поскольку вы пытаетесь получить доступ к этому элементу управления в JavaScript, но он вложен внутри Gridview, я бы предположил, что вы создаете свойство в коде, которое разрешает этот элемент управления. Я бы добавил следующее свойство в файл .cs:

Редактировать: элемент управления также вложен внутри шаблона TemplateField, поэтому нам нужно выполнить итерацию по строкам Gridview, чтобы найти нужную строку, которую необходимо обновить.

protected HtmlInputText txtMemPieceType 
{ 
    get { return findMemPieceType(); } 
} 

private HtmlInputText findMemPieceType() 
{ 
    foreach (GridViewRow row in gvPieceOutturns.Rows) 
    { 
     if (/* Determine which row has the info you need */) 
     { 
      return row.FindControl("txtMemPieceType") as HtmlInputText; 
     } 
    }  
} 

Вам нужно будет найти способ определить, какая строка должна быть обновлена. Alternativly, если строка в вопросе может спровоцировать Gridview событие как RowCommand при выборе пункта, то вы можете сделать что-то похожее на это:

protected HtmlInputText txtMemPieceType { get; set; } 

void gvPieceOutturns_RowCommand(Object sender, GridViewCommandEventArgs e) 
{ 
    int index = Convert.ToInt32(e.CommandArgument); 
    GridViewRow row = ContactsGridView.Rows[index]; 
    txtMemPieceType = row.FindControl("txtMemPieceType") as HtmlInputText; 
} 
+0

Я получаю ошибку Ссылка на объект не установлена ​​в экземпляр объекта с '$ (" # <% = txtMemPieceType.ClientID%> "). Val (result.Code); ' – user123456789

+0

А, я не заметил, что вы используете' HtmlInputText', а не 'Texbox'. Я отредактировал свой ответ, посмотрим, работает ли это. –

+0

Не все равно получите ту же ошибку – user123456789

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