2014-06-18 1 views
1

Après avoir cliqué sur le bouton de modification de ma grille, je montre les données sur différentes zones de texte qui ne sont pas dans la grille. J'ai un bouton "Reset" que je veux utiliser pour revenir aux valeurs d'origine. Mais j'ai un problème pour accéder à ces données gridview à l'intérieur du gestionnaire de clic sur le bouton et le réinitialiser. J'ai essayé d'utiliser DirectCast() mais il montre System.NullReferenceException.Accéder à TemplateField contrôle la valeur de gridview dans le gestionnaire de clic de bouton dans asp.net

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" DataKeyNames="id"> 
<Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:LinkButton ID="lblEdit" runat="server" CausesValidation="false" CommandName="editRecord" Text="EDIT" CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id" Visible="False"> 
     <ItemTemplate> 
      <asp:Label ID="lblRecordID" runat="server" Text='<%# Bind("id") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="HANGER"> 
     <ItemTemplate> 
      <asp:Label ID="lblHANGER" runat="server" Text='<%# Bind("HANGER") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns></asp:GridView> 

Le code vb.net backend est-

Protected Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnReset.Click 
     Dim vID As Label = DirectCast(GridView3.SelectedRow.FindControl("lblRecordID"), Label) 
     Dim vHanger As Label = DirectCast(GridView3.SelectedRow.FindControl("lblRecordID"), Label) 
     txtID.Text.Text = vID.Text() 
     ddlHanger.SelectedValue = vHanger.Text 'dropdown list that's why selectedValue used 

End Sub 

J'ai copié la partie du code provoquer GridView a beaucoup plus de lignes. Je serais reconnaissant si quelqu'un s'il vous plaît me montrer une solution.Merci à l'avance.

+0

Utilisez-vous lblEdit n'importe où dans votre code-behind? –

+0

@lucidgold im en utilisant la commande "editRecord" dans le lblEdit dans le code derrière. – saz

Répondre

0

d'abord supprimer les éléments suivants:

<ItemTemplate> 
    <asp:LinkButton ID="lblEdit" runat="server" CausesValidation="false" 
     CommandName="editRecord" Text="EDIT" 
     CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton> 
</ItemTemplate> 

Et ajouter:

<asp:CommandField ButtonType="Button" ShowSelectButton="True" SelectText="EDIT" /> 

Ce balisage permettra à votre GridView d'avoir un bouton EDIT qui commute l'index courant de ligne sélectionnée correctement. System.NullReferenceException erreur que vous recevez peut être parce que GridView3.SelectedRow est NULL/EMPTY, ce qui signifie également que GridView3 n'a actuellement aucun index sélectionné.

Pour vous assurer que GrieView3 en effet sélectionné une ligne, vous pouvez ajouter: ce qui suit à droite APRÈS le

<SelectedRowStyle BackColor="Black" BorderColor="White" BorderStyle="Dotted" 
        BorderWidth="3px" ForeColor="White" /> 

juste après

</Columns> 

Ainsi, votre balisage GridView3 finale devrait ressembler à:

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" DataKeyNames="id"> 
    <Columns> 
     <asp:CommandField ButtonType="Button" ShowSelectButton="True" 
          SelectText="EDIT" /> 
     <asp:TemplateField HeaderText="id" InsertVisible="False" SortExpression="id" Visible="False"> 
      <ItemTemplate> 
       <asp:Label ID="lblRecordID" runat="server" Text='<%# Bind("id") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="HANGER"> 
      <ItemTemplate> 
       <asp:Label ID="lblHANGER" runat="server" Text='<%# Bind("HANGER") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <SelectedRowStyle BackColor="Black" BorderColor="White" BorderStyle="Dotted" 
         BorderWidth="3px" ForeColor="White" /> 
</asp:GridView> 

Alors vous pouvez al Essayez donc TryCast, comme ceci:

Protected Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnReset.Click 
    Dim vID As String = TryCast(GridView3.SelectedRow.FindControl("lblRecordID"), Label).Text 
    Dim vHanger As String = TryCast(GridView3.SelectedRow.FindControl("lblRecordID"), Label).Text 

    txtID.Text.Text = vID 
    ddlHanger.SelectedValue = vHanger 
End Sub 
+0

Je ne suis pas sûr. Comment vais-je utiliser votre exemple dans mon code? Parce que je suis en train d'utiliser les événements de la commande gridview row et de les éditer dans un panneau séparé où j'envoie les données gridview. – saz

+0

Eh bien, si vous postez plus de votre code, nous pouvons alors trouver un bon placement pour cet article. Recevez-vous toujours System.NullReferenceException? Tout ce que j'ai suggéré était de s'assurer que vous utilisez ShowSelectButton = "True" pour vous assurer que le GridView a en effet une ligne sélectionnée, donc vous ne recevrez plus les erreurs NULL. –

+0

merci. Je suis en train de faire le processus total d'une manière différente maintenant. – saz

Questions connexes