2009-06-09 7 views
2

J'essaie de modifier les valeurs par défaut dans la liste déroulante "time" que le DateTimeControl affiche dans Sharepoint. Je veux un incrément de 15, pas 5 minutes. Quelqu'un a une idée de comment cela pourrait être fait? Puis-je surcharger une méthode ou quelque chose?DateTimeControl dans Sharepoint (C#)

Répondre

1

Malheureusement, cela n'est pas possible en utilisant le champ DateTime initial.

Un champ SharePoint est composé de 2 parties principales. La structure de données (en code) et les différentes vues (à savoir dans une liste, nouveau/modifier/afficher, admin [lors de l'ajout à une liste]). La structure de données hors de la boîte est un champ standard .NET DateTime. Malheureusement, les vues ne donnent que l'incrément de 5 minutes.

Vous pouvez créer le vôtre en héritant du champ par défaut. MSDN a une explication décente de la façon dont. Nick Sevens a une explication beaucoup plus claire.

Malheureusement (comme avec la plupart des personnalisations SharePoint) créer votre propre champ dans CAML peut être difficile.

This project on CodePlex peut être un bon point de départ. Il est sous licence GPL, vous pouvez donc le modifier.

2

En fait, la liste déroulante de temps et ses initialisateurs sont implémentés en tant que membres de données privés de la classe DateTimeControl. Vous ne pouvez donc pas modifier directement les valeurs. Cependant, la liste déroulante des minutes est préparée dans OnPreRender, nous pouvons obtenir le contrôle et réinitialiser ses valeurs indirectement pour obtenir le comportement souhaité. Voici une approche

public class MyDateTimeControl : DateTimeControl 
{ 
    protected override void Render(HtmlTextWriter output) 
    { 
     DropDownList minuteControl = null; 
     string[] newMinutesRange = new string[] { "00", "15", "30", "45" }; 
     string[] newMinutesRangeExt = new string[] { "00", "15", "30", "45", "" }; 
     int index = 0; 
     int selectedMinutes; 

     try 
     { 
      if (!this.DateOnly && this.Controls.Count == 4) 
      { 
       minuteControl = (DropDownList)this.Controls[2]; 
      } 
     } 
     catch { } 

     if (minuteControl != null && !this.DateOnly) 
     { 
      selectedMinutes = Convert.ToInt32(minuteControl.SelectedValue); 
      if (selectedMinutes % 15 > 0) 
      { 
       index = 4; 
       newMinutesRangeExt.SetValue(selectedMinutes.ToString(), index); 
       newMinutesRange = newMinutesRangeExt; 
      } 
      else 
      { 
       index = selectedMinutes/15; 
      } 

      minuteControl.Items.Clear(); 
      minuteControl.SelectedIndex = 0; 
      minuteControl.DataSource = newMinutesRange; 
      minuteControl.DataBind(); 
      minuteControl.SelectedIndex = index; 
     } 

     base.Render(output);    
    } 
} 

Hope this helps

+0

Salut merci, ça a "presque" marché. Il y a juste un petit pépin qui affiche les heures comme: 00-15-30-45-40 Je ne sais pas d'où vient cette 40, je vais essayer de trouver :) –

+0

et ce n'est pas conserve la valeur sélectionnée. Il est difficile de remplacer une classe lorsque vous n'avez pas accès aux sources! : P –

+0

La ligne "this.SelectedDate.Minute" donne toujours l'heure actuelle ... bizarre. –

2

Aller à

[12] \ TEMPLATE \ LAYOUTS \ 1033 \ Bform.js

En ligne: 7690

changement : this.dminControl = 5; à this.dminControl = 15;

Il fonctionne, mais tous DateTimePickers aura un incrément de 15 minutes

1

Vous pouvez obtenir la valeur de Heure sélectionnée et minute de la SharePoint:DateTimeControl en C# par le code suivant:

DateTimeControlName.SelectedDate.Hour 

&

DateTimeControlName.SelectedDate.Minute. 

Ces déclarations retourneront l'heure et la minute en format Integer.

Je sais que cet article est assez ancien. Mais je pensais juste que cela pourrait aider quelqu'un à venir à ce poste.