frmNuevoWidget.cs
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.Text.RegularExpressions;
10 
11 
12 namespace sage.addons.components
13 {
17  public partial class frmNuevoWidget : Form
18  {
23 
24  private string tableName = "";
28  public string TableName
29  {
30  get { return tableName; }
31  set { tableName = value; }
32  }
33 
37  public frmNuevoWidget()
38  {
39  InitializeComponent();
40  }
41 
45  public frmNuevoWidget(FuncsDataBase _funcsDataBase)
46  {
47  InitializeComponent();
48  FuncsDataBase = _funcsDataBase;
49 
50  LoadWidgets();
51 
52  listboxCampos.DisplayMember = "Nombre";
53  listboxCampos.ValueMember = "Nombre";
54  listboxCampos.DataSource = FuncsDataBase.camposNuevoWidgetList;
55  }
56 
57  private void buttonAceptar_Click(object sender, EventArgs e)
58  {
59  string messageError = "";
60  bool lbOk = true;
61  Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
62 
63  lbOk = FuncsDataBase.CrearNuevoWidget(out messageError);
64 
65  if (lbOk && string.IsNullOrWhiteSpace(messageError))
66  {
67  messageError = "Se ha creado los widgets con éxito.";
68  }
69 
70  if (!string.IsNullOrWhiteSpace(messageError))
71  {
72  if (lbOk)
73  MessageBox.Show(messageError, "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Information);
74  else
75  {
76  MessageBox.Show(messageError, "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
77  return;
78  }
79  }
80 
81  HabilitarProperties();
82  this.DialogResult = DialogResult.OK;
83  this.Close();
84  }
85 
86  private void propertygridPropiedades_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
87  {
88  // Si la propiedad es el nombre no dejarlo vacio
89  if (e.ChangedItem.PropertyDescriptor.Name == "Nombre")
90  {
91  if (e.ChangedItem.Value != e.OldValue)
92  {
93  if (!VerificarNombre(Convert.ToString(e.ChangedItem.Value)) && listboxCampos.SelectedItem != null)
94  {
95  ((DataWidgetProperties)listboxCampos.SelectedItem).Nombre = Convert.ToString(e.OldValue) ;
96  return;
97  }
98  }
99  }
100 
101  // Si la propiedad es el nombre no dejarlo vacio
102  if (e.ChangedItem.PropertyDescriptor.Name == "Titulo")
103  {
104  if (e.ChangedItem.Value != e.OldValue)
105  {
106  if (String.IsNullOrEmpty(Convert.ToString(e.ChangedItem.Value)) && listboxCampos.SelectedItem != null)
107  {
108  ((DataWidgetProperties)listboxCampos.SelectedItem).Titulo = Convert.ToString(e.OldValue);
109  MessageBox.Show("Debe indicar el título del widget.", "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
110  return;
111  }
112  }
113  }
114 
115 
116 
117  // Cal fer això pe refrescar la llista
118  listboxCampos.DisplayMember = "";
119  listboxCampos.DisplayMember = "Nombre";
120  }
121 
122  private void toolStripMenuItemNuevaTablaRestablecer_Click(object sender, EventArgs e)
123  {
124  if (propertygridPropiedades.SelectedGridItem.PropertyDescriptor == null)
125  return;
126 
127  propertygridPropiedades.SelectedGridItem.PropertyDescriptor.ResetValue(propertygridPropiedades.SelectedObject);
128  propertygridPropiedades.Refresh();
129  }
130 
131  private void buttonAddCampoTabla_Click(object sender, EventArgs e)
132  {
133  DataWidgetProperties nuevoWidget = FuncsDataBase.NuevoWidget();
134  nuevoWidget.Existe = false;
135 
136  listboxCampos.SelectedIndex = listboxCampos.Items.Count - 1;
137  propertygridPropiedades.SelectedObject = listboxCampos.SelectedItem;
138  propertygridPropiedades.Focus();
139  }
140 
141  private void listboxCampos_SelectedIndexChanged(object sender, EventArgs e)
142  {
143  // Mostrar las propiedades del campo seleccionado
144  if (listboxCampos.SelectedItem != null)
145  propertygridPropiedades.SelectedObject = listboxCampos.SelectedItem;
146  }
147 
148  private void buttonBorrarCampoTabla_Click(object sender, EventArgs e)
149  {
150  if (listboxCampos.SelectedItem != null)
151  {
152  int selectedIndex = listboxCampos.SelectedIndex;
153 
154  if (!FuncsDataBase.BorrarWidget((DataWidgetProperties)listboxCampos.SelectedItem))
155  {
156  MessageBox.Show("No puede borrar el widget seleccionado.", "Borrar widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
157  return;
158  }
159 
160  // Resituar el punter
161  if (selectedIndex > listboxCampos.Items.Count - 1)
162  selectedIndex = listboxCampos.Items.Count - 1;
163 
164  listboxCampos.SelectedIndex = selectedIndex;
165  propertygridPropiedades.SelectedObject = listboxCampos.SelectedItem;
166  }
167  }
168 
169 
170  private void LoadWidgets()
171  {
172  DataTable dtObjetos = new DataTable();
173  FuncsDataBase.ObtenerWidgets(ref dtObjetos);
174 
175  listboxCampos.Items.Clear();
176  FuncsDataBase.camposNuevoWidgetList.Clear();
177 
178  foreach (DataRow drRow in dtObjetos.Rows)
179  {
180  DataWidgetProperties nuevoWidget = FuncsDataBase.NuevoWidget();
181  nuevoWidget.Nombre = Convert.ToString(drRow["clase"]).Trim();
182  nuevoWidget.Descripcion = Convert.ToString(drRow["tooltip"]).Trim();
183  //nuevoWidget.TipoDato = nuevoWidget.GetTipoDato(Convert.ToString(drRow["tipobase"]).Trim());
184  nuevoWidget.TipoDatoKey = Convert.ToString(drRow["tipobase"]).Trim();
185  nuevoWidget.Titulo = Convert.ToString(drRow["nombre"]).Trim();
186  nuevoWidget.Existe = true;
187  }
188  }
189 
190  private bool VerificarNombre(string tcNombre)
191  {
192  if (string.IsNullOrWhiteSpace(tcNombre))
193  {
194  MessageBox.Show("Debe indicar el nombre del widget.", "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
195  return false;
196  }
197 
198  if (tcNombre.Contains(' '))
199  {
200  MessageBox.Show("El nombre del widget no puede contener espacios.", "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
201  return false;
202  }
203 
204  // Verificar un nom vàlid
205  Regex regex = new Regex(@"[/?:&\*""<>|#%]");
206 
207  if (regex.Matches(tcNombre).Count > 0)
208  {
209  MessageBox.Show("El nombre del widget contiene caracteres no válidos.", "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
210  return false;
211  }
212 
213  if (tcNombre == AddonsExecute.NombreAddon)
214  {
215  MessageBox.Show("No se puede indicar el mismo nombre del addon al nuevo widget.", "Crear widget", MessageBoxButtons.OK, MessageBoxIcon.Stop);
216  return false;
217  }
218 
219  return true;
220  }
221 
222 
223  private void HabilitarProperties()
224  {
225  // Realizamos lo siguiente para habilitar los controles bloqueados del propertygrid
226  DataWidgetProperties nuevoWidget = FuncsDataBase.NuevoWidget();
227  nuevoWidget.Existe = false;
228  }
229 
230 
231  private void buttonCancelar_Click(object sender, EventArgs e)
232  {
233  HabilitarProperties();
234  this.DialogResult = DialogResult.Cancel;
235  this.Close();
236  }
237 
238 
239  }
240 }
BindingList< DataWidgetProperties > camposNuevoWidgetList
Lista de campos para nuevos widgets
DataWidgetProperties NuevoWidget()
Crea un nuevo widget y pone propiedades predetermindas
Clase para las acciones en la base de datos
Assitente para crear tablas
bool ObtenerWidgets(ref DataTable dtTabla)
Obtener los widgets en un DataTable
FuncsDataBase FuncsDataBase
Funciones para las bases de datos
bool CrearNuevoWidget(out string messageError)
Crear nuevo widget
frmNuevoWidget()
Inicializa una nueva instancia de la classe frmNuevaTabla
bool BorrarWidget(DataWidgetProperties datawidgetPropertiesItem)
Borrar un widget
frmNuevoWidget(FuncsDataBase _funcsDataBase)
Inicializa una nueva instancia de la classe frmNuevoWidget