从gridview asp.net中的itemTemplate获取元素

问题描述 投票:0回答:1

[我想问一个问题,我实际上是在寻找一种在gridview中修改文本框状态的方法,我迷路了,因为我几周前才开始使用该语言,所以我找不到令人满意的答案(也许我以错误的方式应用了它们,也许您将能够在那里帮助我。这是我的代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <div class="centrer">
            <asp:Image ID="IMG_attente" runat="server" ImageUrl="~/Images/1px.gif" Height="32px" />
        </div>
        <asp:Panel ID="panListes" runat="server" Visible="false" CssClass="formulaire">
            <asp:Label runat="server" ID="LabelErreur" Visible="false"></asp:Label>
            <asp:GridView ID="ListePieceFlash" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSourceListePieceFlash"
                OnRowEditing="ListePieceFlash_RowEditing" OnRowCancelingEdit="ListePieceFlash_RowCancelingEdit"
                EnableModelValidation="True" SkinID="Source_DarkBlue" AllowPaging="True" DataKeyNames="NumOF"
                OnRowCommand="ListePieceFlash_RowCommand" Width="100%" AllowSorting="True">
                <Columns>
                    <asp:TemplateField>
                        <EditItemTemplate>
                            <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/Images/annuler.gif" CommandName="cancel"
                                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" ToolTip="Annuler" />
                            <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Images/okvert.gif" CommandName="save"
                                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" ToolTip="Sauvegarder" />
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/Images/edit.png" CommandName="edit"
                                CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" ToolTip="Sélectionner" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:Label ID="NumSerieLabel" runat="server" Text="NumSerie"></asp:Label></HeaderTemplate>
                        <ItemTemplate>
                            <asp:TextBox ID="NumSerie" runat="server" OnTextChanged="OnNumSerieChanged" /></ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:Label ID="SymboleLabel" runat="server" Text="Symbole"></asp:Label></HeaderTemplate>
                        <ItemTemplate>
                            <asp:TextBox ID="Symbole" runat="server" Enabled="False" OnTextChanged="OnSymboleChanged" /></ItemTemplate>
                    </asp:TemplateField>                        
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSourceListePieceFlash" runat="server" ConnectionString="<%$ ConnectionStrings:PRMConnectionString %>"
                SelectCommand="exec [dbo].[getListePieceFlash]"></asp:SqlDataSource>                
        </asp:Panel>            
    </ContentTemplate>
</asp:UpdatePanel>

您可以看到我的“ Symbole”文本框在开始时被禁用,但是我希望在我填充第一个并且有多个元素时启用它,这是背后的代码(SQL部分是存储过程) :

protected void OnNumSerieChanged(object sender, EventArgs e)
{
        numSerieValue = (sender as TextBox).Text;
        var con = Sql.Instance.ObtenirConnexionSql();
        SqlCommand cmd = ObtenirCommande(con);
        cmd.CommandText = "dbo.getListPiece";
        Int32 count = (Int32)cmd.ExecuteScalar();

        if (count > 1)
            (ListePieceFlash.FindControl("Symbole") as TextBox).Enabled = true;
}

问题出在最后一行,我真的不知道该如何克服,有人可以帮我吗?非常感谢你:)

c# asp.net .net gridview itemtemplate
1个回答
0
投票

ListePieceFlash.FindControl("Symbole")返回null,因为无法通过TextBox找到GridView.FindControlNamingContainerTextBoxGridViewRow

您可以通过将Sender中的OnNumSerieChanged强制转换为TextBox并将其NamingContainer属性强制转换为GridViewRow来获得。然后使用row.FindControl("Symbole")查找目标TextBox

protected void OnNumSerieChanged(object sender, EventArgs e)
{
    TextBox NumSerie = (TextBox) sender;
    GridViewRow row = (GridViewRow) NumSerie.NamingContainer;
    TextBox Symbole = (TextBox) row.FindControl("Symbole");
    // ...
}

[请注意,我强烈建议不要在ASP.NET中使用此类帮助程序类来保存和返回数据库对象,例如Sql.Instance.ObtenirConnexionSql()It can be a source of nasty errors

© www.soinside.com 2019 - 2024. All rights reserved.