by Andrea
16 September 2009 12:17
Con i Dynamic Data la velocità di realizzare l'applicazione aumenta notevolmente (ovvio che dipende sempre dal tipo di applicazione che si deve realizzare) e con la creazione di FieldTemplates di ha la possibilità di migliorare l'iterazione tra applicazione e utente.
Una delle necessità che ho avuto è stata quella di dover far inserire il valore in esadecimale di un colore (es: #FFFFFF), e consapevole del fatto che un utente non potesse conoscere i valori a memoria, mi sono adoperato per realizzare un opportuno FieldTemplate.
L'ultima versione degli AJAX Control Toolkit mi è venuta in aiuto grazie al controllo ColorPicker che è stato recentemente incluso, ed ecco qui il risultato ottenuto:

Il codice del FieldTemplate è il seguente:
1: public partial class Color_EditField : FieldTemplateUserControl
2: {
3: protected override void ExtractValues(IOrderedDictionary dictionary)
4: {
5: dictionary[Column.Name] = ConvertEditedValue(txtColor.Text);
6: }
7:
8: public override Control DataControl
9: {
10: get { return txtColor; }
11: }
12: }
1: <%@ Control Language="C#" CodeBehind="Color_Edit.ascx.cs" Inherits="DynamicData.FieldTemplates.Color_EditField" AutoEventWireup="True" %>
2:
3: <asp:ImageButton
4: runat="Server"
5: ID="btnOpenColorPicker"
6: style="float:left;margin:0 3px"
7: ValidationGroup="none"
8: ImageUrl="~/images/cp_button.png"
9: AlternateText="Click to show color picker" />
10: <asp:Panel
11: runat="server"
12: ID="pnlColor"
13: style="width:18px;height:18px;border:1px solid #000;margin:0 3px;float:left" />
14: <atk:ColorPickerExtender
15: runat="server"
16: ID="colorPicker"
17: TargetControlID="txtColor"
18: PopupButtonID="btnOpenColorPicker"
19: SampleControlID="pnlColor"
20: PopupPosition="Absolute" />
21: <asp:TextBox ID="txtColor"
22: runat="server"
23: Text='<%# FieldValueEditString %>'
24: style="visibility:hidden;" />
Nella mia applicazione non avevo la necessita di visualizzare il codice del colore (che compare nella TextBox), ma nel caso a qualcuno interessasse, sarà sufficiente togliere lo stile "visibility:hidden;" dalla TextBox txtColor.