1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace BIS.Composant
{
#region **** DataGridViewSearchColumn ****
// Représente une colonne dans un contrôle DataGridView.
public class DataGridViewSearchColumn : DataGridViewColumn
{
public DataGridViewSearchColumn()
: base(new SearchCell())
{
CellTemplate = new SearchCell();
}
// CellTemplate: Obtient ou définit le modèle utilisé pour créer des cellules.
public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
// Ensure that the cell used for the template is a CalendarCell.
if (value != null &&
!value.GetType().IsAssignableFrom(typeof(SearchCell)))
{
throw new InvalidCastException("Must be a SearchCell");
}
base.CellTemplate = value;
}
}
[Browsable(true), Category("Propriétés: DataGridViewSearchColumn"), Description("Image.")]
public Image ImageButton
{
get { return ((SearchCell)this.CellTemplate).ImageButton; }
set {
((SearchCell)this.CellTemplate).ImageButton = value;
//DataGridView
if (this.DataGridView == null)
return;
int rowCount = this.DataGridView.RowCount;
for (int i = 0; i < rowCount; i++)
{
DataGridViewRow r = this.DataGridView.Rows.SharedRow(i);
((SearchCell)r.Cells[this.Index]).ImageButton = value;
}
}
}
}
#endregion
#region **** SearchCell ****
public class SearchCell : DataGridViewTextBoxCell
{
private Image _Image;
public SearchCell()
: base()
{
}
[Browsable(true), Category("Propriétés: DataGridViewSearchColumn"), Description("Image.")]
public Image ImageButton
{
get { return _Image; }
set { this._Image = value; }
}
// InitializeEditingControl: Attache et initialise le contrôle d'édition hébergé.
public override void InitializeEditingControl(int rowIndex, object
initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
// Set the value of the editing control to the current cell value.
base.InitializeEditingControl(rowIndex, initialFormattedValue,
dataGridViewCellStyle);
SearchEditingControl ctl =
DataGridView.EditingControl as SearchEditingControl;
if (this.Value != null)
{
ctl.Text = this.Value.ToString();
}
}
public override Type EditType
{
get
{
// Return the type of the editing contol that SearchCell uses.
return typeof(SearchEditingControl);
}
}
public override Type ValueType
{
get
{
// Return the type of the value that SearchCell contains.
return typeof(string);
}
}
public override object DefaultNewRowValue
{
get
{
// Use the current date and time as the default value.
return "";
}
}
}
#endregion
#region **** SearchEditingControl ****
class SearchEditingControl : BISTextBoxSearch, IDataGridViewEditingControl
{
DataGridView dataGridView;
private bool valueChanged = false;
int rowIndex;
public SearchEditingControl()
{
}
// Implements the IDataGridViewEditingControl.EditingControlFormattedValue
// Obtient ou définit la valeur mise en forme de la cellule en cours de modification par l'éditeur.
public object EditingControlFormattedValue
{
get
{
return this.Text;
}
set
{
if (value is String)
{
this.Value = (String)value;
}
}
}
// Implements the
// Récupère la valeur mise en forme de la cellule.
public object GetEditingControlFormattedValue(
DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
}
// Implements the
// Modifie l'interface utilisateur du contrôle pour qu'elle soit cohérente avec le style de cellule spécifié.
public void ApplyCellStyleToEditingControl(
DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
this.ForeColor = dataGridViewCellStyle.ForeColor;
this.BackColor = dataGridViewCellStyle.BackColor;
}
// Obtient ou définit l'index de la ligne parente de la cellule d'hébergement.
// property.
public int EditingControlRowIndex
{
get
{
return rowIndex;
}
set
{
rowIndex = value;
}
}
// Implements the IDataGridViewEditingControl.EditingControlWantsInputKey
// Détermine si la touche spécifiée est une touche de saisie normale que le contrôle d'édition doit traiter ou une touche spéciale que DataGridView doit traiter.
public bool EditingControlWantsInputKey(
Keys key, bool dataGridViewWantsInputKey)
{
// Let the DateTimePicker handle the keys listed.
switch (key & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return !dataGridViewWantsInputKey;
}
}
// Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit
// Prépare la cellule actuellement sélectionnée pour la modification.
public void PrepareEditingControlForEdit(bool selectAll)
{
// No preparation needs to be done.
}
// Implements the IDataGridViewEditingControl
// Obtient ou définit une valeur indiquant si le contenu de la cellule doit être repositionné à chaque fois que la valeur change.
public bool RepositionEditingControlOnValueChange
{
get
{
return false;
}
}
// Implements the IDataGridViewEditingControl
// Obtient ou définit le DataGridView qui contient la cellule.
public DataGridView EditingControlDataGridView
{
get
{
return dataGridView;
}
set
{
dataGridView = value;
}
}
// Implements the IDataGridViewEditingControl
// Obtient ou définit une valeur indiquant si la valeur du contrôle d'édition diffère de la valeur de la cellule d'hébergement.
public bool EditingControlValueChanged
{
get
{
return valueChanged;
}
set
{
valueChanged = value;
}
}
// Implements the IDataGridViewEditingControl
// Obtient le curseur utilisé lorsque le pointeur de la souris se trouve sur DataGridView.EditingPanel mais pas sur le contrôle d'édition.
public Cursor EditingPanelCursor
{
get
{
return base.Cursor;
}
}
protected override void OnTextChanged(EventArgs e)
{
valueChanged = true;
//NotifyCurrentCellDirty: Notifie le DataGridView que la cellule active comporte des modifications non validées.
this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
base.OnTextChanged(e);
}
}
#endregion
} |
Partager