2010-08-21 13 views
0

J'ai une table SalesOrderItem et une colonne UnitPrice dans le cas où le vendeur souhaite remplacer le prix unitaire du produit pour cet article de commande.Définir automatiquement une valeur de propriété pour un nouvel enregistrement dans une application Dynamic Data

Dans une application ASP.NET Dynamic Data, quelle serait la meilleure façon de définir cette propriété UnitPrice sur un nouvel SalesOrderItem basé sur le UnitPrice standard du produit? En d'autres termes, lorsque l'utilisateur clique sur Nouveau dans l'écran "Éléments" pour une commande client, le champ Prix Unitaire doit déjà être rempli avec le prix unitaire normal pour le produit.

+0

http://forums.asp.net/t/1593122.aspx – XIII

Répondre

0

Si la valeur par défaut UnitPrice était une constante, ce serait aussi simple que le réglage de la DefaultValueAttribute sur la colonne de métadonnées UnitPrice. Puisque la valeur par défaut doit être calculée au moment de l'exécution, nous devons adopter une approche différente.

On ne sait pas exactement comment se trouve l'enregistrement Product. En supposant qu'il est disponible sur le serveur lorsque la page Insérer est initialement rendue, vous pouvez create a field template pour la colonne UnitPrice. Par exemple, supposons également que le type de colonne UnitPrice est décimal. Localiser le dossier des modèles de champs (par défaut dans "~/DynamicData/FieldTemplates"). En utilisant les fichiers Decimal_Edit.ascx * comme guide, créez un nouvel ensemble de fichiers de modèles de champs nommés "UnitPrice_Insert.ascx", "UnitPrice_Insert.ascx.cs" et "UnitPrice_Insert.ascx.designer.cs". Utilisez le fichier code-behind pour calculer et définir la valeur par défaut:

protected void Page_Init(object sender, EventArgs e) { 
    decimal defaultUnitPrice; 
    // Calculate and set the defaultUnitPrice here. 
    // "this.Page" might be useful for locating the Product record. 
    FieldValue = defaultUnitPrice; 
} 

Enfin, annoter les métadonnées pour la UnitPrice colonne à utiliser le modèle qui vient d'être créé:

[UIHint("UnitPrice")] 

Maintenant, la L'écran d'insertion utilisera "UnitPrice_Insert.ascx" et affichera ainsi la valeur par défaut calculée, tandis que les écrans List, Details et Edit utiliseront toujours les modèles "Decimal.ascx" et "Decimal_Edit.ascx", qui indiquent la valeur réelle de la colonne, pas la valeur par défaut.