2010-12-10 19 views
1

MyDataSource est une source de données stockées dans une session passée à travers une page de rechercheensemble chaîne de format de date d/M/aaaa et HTMLEncode = false dans programme créé gridview

protected void Page_Load(object sender, EventArgs e) 
{ 

    gridview1.DataSource = Session["MyDataSource"]; 
    gridview1.DataBind(); 




} 

de GridView1 est un gridview sans datasource attendre l'événement de chargement de la page pour se lier à une source de données, dans mon cas, il est MyDataSource

<asp:GridView ID="gridview1" runat="server" BackColor="LightGoldenrodYellow" 
    BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
    GridLines="None"> 
    <AlternatingRowStyle BackColor="PaleGoldenrod" /> 
    <FooterStyle BackColor="Tan" /> 
    <HeaderStyle BackColor="Tan" Font-Bold="True" /> 
    <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
     HorizontalAlign="Center" /> 
    <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> 
    <SortedAscendingCellStyle BackColor="#FAFAE7" /> 
    <SortedAscendingHeaderStyle BackColor="#DAC09E" /> 
    <SortedDescendingCellStyle BackColor="#E1DB9C" /> 
    <SortedDescendingHeaderStyle BackColor="#C2A47B" /> 
</asp:GridView> 

dates apparaissant dans cet affichage GridView comme M/d/yyyy + temps par exemple 12/31/2010 00:00: 00

Ma question: J'ai besoin d'un moyen d'afficher la date en j/m/aaaa sans temps par exemple 31/12/2010 habituellement je fais cela en définissant les propriétés gridview htmlencode = false et dateformatstring = "{0: M-dd-yyyy} " mais dans ce cas, le gridview ne montre aucun champ car il lie les données seulement au moment de l'exécution

s'il vous plaît j'ai besoin de votre aide dans ce numéro ASAP. merci d'avance

Répondre

3

Essayez d'utiliser ce code:

<asp:GridView ID="gridview1" runat="server" BackColor="LightGoldenrodYellow" 
BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
GridLines="None" AutoGenerateColumns="false"> 
<AlternatingRowStyle BackColor="PaleGoldenrod" /> 
<FooterStyle BackColor="Tan" /> 
<HeaderStyle BackColor="Tan" Font-Bold="True" /> 
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
    HorizontalAlign="Center" /> 
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> 
<SortedAscendingCellStyle BackColor="#FAFAE7" /> 
<SortedAscendingHeaderStyle BackColor="#DAC09E" /> 
<SortedDescendingCellStyle BackColor="#E1DB9C" /> 
<SortedDescendingHeaderStyle BackColor="#C2A47B" /> 

<Columns> 
    <asp:BoundField DataField="PropertyName" /> 
    <asp:BoundField DataField="PropertyName" /> 
    <asp:BoundField DataField="DateTimeProperty" DataFormatString="{0:dd/M/yyyy}" /> 
</Columns> 

Il fonctionne très bien dans mon ordinateur. J'espère que cela vous aidera. Meilleures salutations Dima.

+0

Dima, cela a bien fonctionné avec moi, mais sans en-tête. pouvez-vous s'il vous plaît m'indiquer comment ajouter l'en-tête –

+2

@mokokamello: asp: BoundField a une propriété pour définir l'en-tête.Je crois que son « HeaderText » – Pandincus

+1

et Dima Pandincus: Merci à vous deux, vous êtes super sympa et serviable, agréable de vous rencontrer sur Stackoverflow –

2

Le gridview n'affichera aucune donnée à moins que vous ne lui indiquiez quoi montrer.

Une solution rapide serait quelque chose comme ceci:

<asp:GridView ID="gridview1" runat="server" OnRowDataBound="gridview1_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Label ID="dateLabel" runat="server" /> 
      <ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

puis dans votre code-behind:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null) 
    { 
     var item = (MyCustomDataBoundObject)e.Row.DataItem; 
     var dateLabel = (Label)gridview1.FindControl("dateLabel"); 
     dateLabel.Text = item.Date.ToString("dd/MM/yyyy"); 
    } 
} 

Ce qui précède est non testé, mais devrait être suffisant pour vous obtenir ce que vous » re demande. Par curiosité, pourquoi transmettez-vous la source de données au cours de la session par curiosité? Je ne sais rien de votre application, mais ce n'est jamais une approche que j'ai prise auparavant. Pourquoi ne pas simplement lier le gridview à une objectdatasource que vous avez définie dans votre page aspx? Ensuite, vous pouvez utiliser une colonne liée simple.

+0

salut Pandincus, je suis encore nouveau sur asp.net et C# et j'ai peut-être fait une erreur en mettant datasource dans une session, je vais considérer votre suggestion. J'ai 2 questions: 1- je ne sais pas quoi mettre à la place de MyCustomDataBoundObject, dois-je remplacer par gridview? 2- J'ai 3 dates différentes dans mon gridview: date de naissance, date de début et date de fin .. je ne suis pas sûr si votre code traitera trois dates –

+2

@mokokamello: Nevermind, vous pouvez faire ce que Dima a suggéré. Je ne sais pas pourquoi mais pour une raison quelconque j'ai pensé que les colonnes de databound ne fonctionneraient pas avec une source de données déclarée dans l'événement page_load. – Pandincus

+2

@mokokamello: Mais si vous vouliez suivre mon code, vous remplaceriez (MyCustomDataBoundObject) par ce que vous retiriez de votre source de données. Je ne sais pas ce que c'est parce que je ne sais pas ce que fait votre source de données. Et pour gérer 3 dates, vous créez 3 champs de modèle. Mais comme je l'ai dit, la solution la plus simple serait la solution de Dima ci-dessous. – Pandincus