2017-09-20 3 views
0

J'ai un GridView son DataSource est à partir d'une table de base de données. Je veux afficher différents textes dans les lignes selon les valeurs de la base de données. Ici, pour la colonne Facturé Pour, si le champ BILLING_DTLS_STATUS a la valeur 1, il doit afficher "NORTH COUNTER", a la valeur 2, il devrait afficher "SOUTH COUNTER" et a la valeur 3, il devrait afficher "MAIN COUNTER".définir le texte des lignes GridView correspondant aux valeurs des champs DataTable

Aussi j'ai un bouton btnBilled, si le champ BILL_STATUS a la valeur 1 le texte du bouton devrait être "DISABLE" et si 0 le texte devrait avoir "ENABLE".

<asp:GridView ID="GridView1" 
    runat="server" 
    AutoGenerateColumns="False" 
    OnRowDataBound="GridView1_RowDataBound">    
    <Columns> 
     <asp:TemplateField HeaderText="S No." ItemStyle-Width="15%" > 
      <ItemTemplate> 
       <%#Container.DataItemIndex+1 %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField 
      DataField="BILLING_DTLS_STATUS" 
      HeaderText="Billed For"> 
      <ItemStyle VerticalAlign="Top" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="BILLING_SUB_TYPE" 
      HeaderText="Billing Type"> 
      <ItemStyle VerticalAlign="Top" /> 
     </asp:BoundField> 
     <asp:BoundField DataField="BILLIG_AMT" 
      HeaderText="Billing Amount"> 
      <ItemStyle VerticalAlign="Top" /> 
     </asp:BoundField> 
     <asp:TemplateField HeaderText="STATUS"> 
     <ItemTemplate > 
      <asp:Button ID="btnBilled" Text="" runat="server" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

J'ai initally changé la valeur de BILLING_DTLS_STATUS puis rempli GridView, mais je pense que cette approche est incorrecte. Aussi, comment puis-je définir le texte du bouton selon la valeur du champ BILL_STATUS.

public void Get_Billing_Type() 
     { 
      try 
      { 
       DataTable dt = new DAL_Set_Billing_Type().Get_Billing_Type(); 
       foreach (DataRow row in dt.Rows) 
       { 
        switch(row[0].ToString()) 
        { 
         case "1": 
          { 
           row["BILLING_DTLS_STATUS"] = "NORTH COUNTER"; 
           break; 
          } 
         case "2": 
          { 
           row["BILLING_DTLS_STATUS"] = "SOUTH COUNTER"; 
           break; 
          } 
         case "3": 
          { 
           row["BILLING_DTLS_STATUS"] = "MAIN COUNTER"; 
           break; 
          } 
        } 
       } 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
      } 
      catch (Exception) {   } 
     } 

Répondre

1

Pourquoi ne pas créer une méthode qui renvoie le type correct sur la base BILLING_DTLS_STATUS

public string Get_Billing_Type(int type) 
{ 
    if (type == 1) 
    { 
     return "NORTH COUNTER"; 
    } 
    else if (type == 2) 
    { 
     return "SOUTH COUNTER"; 
    } 
    else if (type == 3) 
    { 
     return "MAIN COUNTER"; 
    } 
    else 
    { 
     return "NO COUNTER"; 
    } 
} 

Ensuite, dans GridView, vous pouvez obtenir la valeur correcte.

<asp:TemplateField HeaderText="Billing Status"> 
    <ItemTemplate> 
     <%# Get_Billing_Type(Convert.ToInt32(Eval("BILLING_DTLS_STATUS"))) %> 
    </ItemTemplate> 
</asp:TemplateField> 

Pour un bouton qui n'a que 2 options, vous pouvez utiliser un opérateur ternaire. Vous pouvez également utiliser la même technique que celle mentionnée ci-dessus et créer une méthode pour cela.

<asp:TemplateField HeaderText="Billing Status"> 
    <ItemTemplate> 
     <asp:Button ID="Button1" runat="server" Text='<%# Convert.ToBoolean(Eval("BILL_STATUS")) ? "DISABLE" : "ENABLE" %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 
0

Similar to this

Mes deux cents: -

  • si seulement deux valeurs sont là, vous pouvez utiliser l'opérateur ternaire.
  • Aussi, je préfère changer le texte d'affichage au client de base de données requête lui-même (SP, Linq)