Contrôle listview éditable.

Soyez le premier à donner votre avis sur cette source.

Vue 17 388 fois - Téléchargée 1 732 fois


Description

Permet d'ajouter un contrôle de liste de type ListView dont on peux modifier les valeurs de chaques éléments en mode détails.
La modification des informations principales peuvent se faire directement avec le concepteur de formulaires de Visual Studio .NET.
Pour chaque colonnes de la vue détail qui doivent pouvoir éditer, il faut ajouter une information de colonne pour celle-ci.
Les contrôles TextBox, ComboBox, NumericUpDown et DomainUpDown sont gérés par défaut avec possibilité de définir dans le concepteur certaines de leurs informations principales. Il est possible d'utiliser un autre type de contrôle en le spécifiant manuellement dans le code généré par le concepteur de formulaire. Cependant il faudra gérer manuellement la définiton des informations spécifiques au contrôle en manipulant le Control grâce à la propriété EditableColumnInformation.EditControl par cast dans le type voulu.

Le zip contient seulement le fichier de code et de resource du composant. Il faut l'insérer dans un projet. La source devrais être compatible .NET 1.0 mais j'ai pas testé. (En tout cas, fonctionne avec le 1.1.

Pour insérer le contrôle dans un formulaire, il faut compiler le projet et y ajouter une référence dans la Boîtes à outils, ou insérer une ListView et changer son type dans le code du formulaire, partout où il faut.

J'ai sans doute oublié quelque chose mais je m'en rappel pas...

L'aide est maintenant disponible ici : http://membres.lycos.fr/bafm2048/EditableListView/ ou dans le zip.

Conclusion :


Pour l'instant je n'ai pas remarqué de bug, mais ces bêtes se cachent bien.
Je pense inclure des exemple à l'aide mais pas tout de suite :)
L'accès web à l'aide bug un peu à cause de l'hebergeur...

Tout remarque, suggestions, commentaires sont appréciés.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
12
Date d'inscription
lundi 4 octobre 2004
Statut
Membre
Dernière intervention
24 juillet 2007

Merci, super ce code... J'arrivais pas à le faire marcher avec le concepteur, je suis un peu débutant mais maintenant j'ai compris et ca fonctionne très bien... Merci

Voila mon code pour ceux que ca interesse vu que j'ai pas trouvé d'exemple encore:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace MaintGest
{
/// <summary>
/// Description résumée de Form8.
/// </summary>
public class Form14 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ColumnHeader columnHeader6;
private System.Windows.Forms.ColumnHeader columnHeader7;
private System.Windows.Forms.ColumnHeader columnHeader8;
private System.Windows.Forms.ColumnHeader columnHeader9;
private System.Windows.Forms.ColumnHeader columnHeader10;
private EditableListView listView2;
private EditableColumnInformation Colonne1;
private EditableColumnInformation Colonne2;
private MaintGest.EditableColumnInformation editableColumnInformation1;
private System.Windows.Forms.Label label2;
private System.ComponentModel.IContainer components;

public Form14()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();


//Initialisation interne





//
// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
//

}

/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
 "1234",
 "Pièce 1",
 "12",
 "MAN",
 "1 265 ?"}, -1);
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {
 "4567",
 "Pièce 2",
 "6",
 "MAN",
 "200 ?"}, -1);
this.columnHeader6 = new System.Windows.Forms.ColumnHeader();
this.columnHeader7 = new System.Windows.Forms.ColumnHeader();
this.columnHeader8 = new System.Windows.Forms.ColumnHeader();
this.columnHeader9 = new System.Windows.Forms.ColumnHeader();
this.columnHeader10 = new System.Windows.Forms.ColumnHeader();
this.listView2 = new MaintGest.EditableListView(this.components);
this.editableColumnInformation1 = new MaintGest.EditableColumnInformation();
this.button2 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout();
// 
// columnHeader6
// 
this.columnHeader6.Text = "Référence";
this.columnHeader6.Width = 69;
// 
// columnHeader7
// 
this.columnHeader7.Text = "Nom";
this.columnHeader7.Width = 253;
// 
// columnHeader8
// 
this.columnHeader8.Text = "Quantité";
// 
// columnHeader9
// 
this.columnHeader9.Text = "Fournisseur";
this.columnHeader9.Width = 110;
// 
// columnHeader10
// 
this.columnHeader10.Text = "Prix";
this.columnHeader10.Width = 63;
// 
// listView2
// 
this.listView2.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader6,
this.columnHeader7,
this.columnHeader8,
this.columnHeader9,
this.columnHeader10});
this.listView2.ColumnsInfos.AddRange(new MaintGest.EditableColumnInformation[] {
   this.editableColumnInformation1});
this.listView2.FullRowSelect = true;
this.listView2.GridLines = true;
this.listView2.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
  listViewItem1,
  listViewItem2});
this.listView2.LabelEdit = true;
this.listView2.Location = new System.Drawing.Point(50, 88);
this.listView2.Name = "listView2";
this.listView2.Size = new System.Drawing.Size(700, 312);
this.listView2.TabIndex = 21;
this.listView2.View = System.Windows.Forms.View.Details;
// 
// editableColumnInformation1
// 
this.editableColumnInformation1.ColumnIndex = 4;
this.editableColumnInformation1.ControlType = typeof(System.Windows.Forms.TextBox);
// 
// button2
// 
this.button2.BackColor = System.Drawing.Color.LightBlue;
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.button2.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
this.button2.Location = new System.Drawing.Point(456, 464);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(216, 88);
this.button2.TabIndex = 17;
this.button2.Text = "Valider";
this.button2.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
// 
// button1
// 
this.button1.BackColor = System.Drawing.Color.LightBlue;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.button1.ImageAlign = System.Drawing.ContentAlignment.TopCenter;
this.button1.Location = new System.Drawing.Point(88, 464);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(216, 88);
this.button1.TabIndex = 18;
this.button1.Text = "Annuler";
this.button1.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
// 
// label2
// 
this.label2.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.label2.Location = new System.Drawing.Point(120, 48);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(360, 24);
this.label2.TabIndex = 32;
this.label2.Text = "Merci de renseigner les prix négociés";
// 
// Form11
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
this.ClientSize = new System.Drawing.Size(792, 566);
this.Controls.Add(this.listView2);
this.Controls.Add(this.label2);
this.Controls.Add(this.button1);
this.Controls.Add(this.button2);
this.Name = "Form11";
this.Text = "Bons de commandes";
this.ResumeLayout(false);

}
#endregion



private void button1_Click(object sender, System.EventArgs e)
{
GestionVariables.getInstance().FermetureDanger(this);
}

private void button2_Click(object sender, System.EventArgs e)
{
Form9 form9 = new Form9();
form9.Owner = this.Owner;
form9.Show();
this.Hide();
}
}
}



Désolé c'est ma form14 donc il n'y a pas tout ce qui faut si vous le voulez dans la form1... Il suffit de le mettre dans une 2eme form et d'y faire appel de la 2eme... Le principal c'est l'appel à la class qui nous interesse et le paramétrage du composant.

Bye
Merci encore à BAFM
Messages postés
11
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
31 août 2005

Merci enfin ça marche.
Messages postés
64
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
26 novembre 2009

Il faut faire les liaisons aux évènements manuellement aussi.
Pour information, la liaison à un évènement se fait par :
<nomobjet>.<évènement> += new <type délégué>(<méthode>);
MG
Messages postés
11
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
31 août 2005

Merci d'abord pour l'aide,
Finalement ça marche. Mais une autre fois j'arrive pas à gérer les événement sur le contrôle,
malgré la récupération de ce dernier à l'aide de la propriété Editecontrole

Merci.
Messages postés
64
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
26 novembre 2009

Alhabas, il faut le remplir manuellement le control. La propriété de EditableColumnInfoInformation.EditControl qui te retourne le control associé qu'il faut convertir en le type sélectionné te retourne le contrôle qui sera affiché lors de la demande d'édition de la colonne. A partir de la, tu pourra ajouter les éléments. De plus, grâce à l'évènement ExtendedBeforeLabelEdit, tu peut remplir la liste déroulante en fonction de l'élément sélectionné.

PS : Je suis actuellement en train de travailler sur un composant du même type mais sans dériver de la ListView du système.

MG
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.