如何调用GridView中的文本框

How to call a textbox that is in GridView

本文关键字:文本 GridView 何调用 调用      更新时间:2023-09-26

我有一个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("");
        }
    }

但我得到了这个错误:

错误2586当前文件中不存在名称"txtMemPieceType"上下文

不会

gvPieceOutturns.FindControl("hfPieceType");

工作?

你也可以试试

ClientIDMode="Static"

在您的TextBoxes上,在它们上使用jQuery。

由于您试图在JavaScript中访问该控件,但它嵌套在Gridview中,我建议您在代码后面创建一个属性来解析该控件。我会将以下属性添加到.cs文件中:

Edit:控件也嵌套在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;
        }
    }       
}

您需要想出一种方法来区分哪些行需要更新。或者,如果当项目被选中时,有问题的行可以触发类似RowCommand的Gridview事件,那么你可以做类似的事情:

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;
}