2010-02-18 5 views
0

je suis usin événement RowDataBound de gridview faire quelques formattage dans la colonne GridView. Mais quand j'exécute le code et le débogue en utilisant la fenêtre immédiate je n'obtiens rien dans e.Row.Cells [1] .Text. Je remplis le gridview à partir d'un datatable. Il affiche les enregistrements mais je ne sais pas pourquoi il ne reçoit pas dans rowdatabound.
Voici mon code pour la liaisondonnées de ligne problème lié

<asp:GridView runat="server" AutoGenerateColumns="False" 
         ID="gviewTemplate" onrowdatabound="gviewTemplate_RowDataBound" DataKeyNames="F1" 
         onrowcommand="gviewTemplate_RowCommand" 
         onrowediting="gviewTemplate_RowEditing" 
         onrowcancelingedit="gviewTemplate_RowCancelingEdit" 
         onrowupdating="gviewTemplate_RowUpdating"> 
         <Columns> 
          <asp:TemplateField> 
           <EditItemTemplate> 
            <asp:Label ID="lblID" runat="server" Text='<%# Bind("F1") %>'></asp:Label> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label Runat="server" Text='<%# Bind("F1") %>' ID="lblID1"></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Uploaded Image"> 
          <EditItemTemplate> 
           <asp:LinkButton Text="Reload" runat="server" CommandArgument='<%# Bind("F1") %>' CommandName="reload" ID="lbtnReloadImage"></asp:LinkButton> 
          </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label Runat="server" Text='<%# Eval("Uploaded") %>' ID="lblUploaded"></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Template Name"> 
           <ItemStyle VerticalAlign="Top" HorizontalAlign="Center" /> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtTemplateName" Width="50" Runat="server" Text='<%# Eval("F2") %>'></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server" 
            ErrorMessage="You must provide a Product Name." ControlToValidate="txtTemplateName">*</asp:RequiredFieldValidator> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblTemplateName" runat="server" Text='<%# Eval("F2") %>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Heading"> 
           <ItemStyle VerticalAlign="Top" HorizontalAlign="Center" /> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtHeading" Runat="server" Width="50" Text='<%# Eval("F3") %>'></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" Runat="server" 
            ErrorMessage="You must provide a Product Name." ControlToValidate="txtHeading">*</asp:RequiredFieldValidator> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblHeading" runat="server" Text='<%# Eval("F3") %>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Coupon Text"> 
           <ItemStyle VerticalAlign="Top" HorizontalAlign="Center" /> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtCouponText" Runat="server" Width="50" Text='<%# Bind("F4") %>'></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" Runat="server" 
            ErrorMessage="You must provide a Product Name." ControlToValidate="txtCouponText">*</asp:RequiredFieldValidator> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label Runat="server" Text='<%# Bind("F4") %>' ID="lblCouponText"></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 

et c'est ce que je fais dans RowDataBound

protected void gviewTemplate_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
     if (e.Row.Cells[1].Text != e.Row.Cells[2].Text) 
     { 
      e.Row.BackColor = System.Drawing.Color.Red; 
     } 
} 

je ne peux pas comprendre si les enregistrements sont affichés dans la grille le pourquoi ne peux pas je reçois dans RowDataBound

Répondre

0

Parce que vous utilisez le champ de modèle dans la grille, alors essayez de déboguer et maintenez la cellule puis essayez de trouver la zone de texte à l'intérieur puis lire sa valeur

+0

mais comment vais-je Cange la couleur de l'arrière-plan cellulaire maintenant – pankaj

+0

vous pouvez mettre un cxontainer à l'intérieur du modèle comme la table ou sur le panneau, puis appliquer la couleur de retour sur elle –

+0

titan ok merci, je vais essayer maintenant – pankaj

0

essayez ceci:
vous devez vérifier la rowtype parce que la ligne databound il comprend également en-tête, pied de page et

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow & (e.Row.RowState == DataControlRowState.Normal | e.Row.RowState == DataControlRowState.Alternate)) { 
      //your code here 
     } 
    }