2010-03-08 12 views
2

Comment créer dynamiquement un DataGridView en C#? Pourriez-vous s'il vous plaît fournir un exemple?Comment créer dynamiquement un DataGridView en C#?

+0

Travaillez-vous dans WinForms, WPF, ASP.NET? Quand je vois la balise 'datagridview, je pense au contrôle WinForms introduit avec .NET 2.0. D'autres personnes (comme vous pouvez le voir dans les réponses ci-dessous) vont penser en termes de ASP.NET, et le 'GridView comme trouvé dans System.Web.UI.WebControls. S'il vous plaît clarifier, merci. – BillW

+0

@BillW je travaille avec WinForms – ratty

Répondre

6

Vous pouvez le créer comme tous les autres contrôles.

place un contrôle PlaceHolder dans votre page (cela servira de point de départ)

pour que votre page ressemble

<body> 
    <form id="form" runat="server" /> 
    <asp:PlaceHolder id="ph" runat="server" /> 
</body> 

Ensuite, dans votre code derrière, il suffit de créer et ajouter des contrôles à la place Titulaire

// Let's create our Object That contains the data to show in our Grid first 
string[] myData = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I" }; 

// Create the Object 
GridView gv = new GridView(); 

// Assign some properties 
gv.ID = "myGridID"; 
gv.AutoGenerateColumns = true; 

// Assing Data (this can be a DataTable or you can create each column through Columns Colecction) 
gv.DataSource = myData; 
gv.DataBind(); 

// Now that we have our Grid all set up, let's add it to our Place Holder Control 
ph.Controls.Add(gv); 

Vous souhaitez peut-être ajouter d'autres contrôles?

// How about adding a Label as well? 
Label lbl = new Label; 
lbl.ID = "MyLabelID"; 
lbl.Text = String.Format("Grid contains {0} row(s).", myData.Length); 

ph.Controls.Add(lbl); 

// Done! 

vous espère que cela aide à démarrer

+0

+1 @balexandre: Nice/point de départ rapide. @ratty: Si vous voulez en savoir plus sur l'ajout dynamique de contrôles, consultez ceci: http://izlooite.blogspot.com/search/label/Dynamic%20Controls –

3

Sur la base de votre réponse que vous sont en utilisant WinForms. D'abord un exemple très simple, puis une petite discussion des problèmes à considérer en fonction de scénarios d'utilisation «typiques».

Voici un exemple précis où, en réponse à un clic sur un bouton à l'exécution, une nouvelle DataGridView est créée, placée sur la forme, la taille, etc.:

// declare a form scoped variable to hold a reference 
// to the run-time created DataGridview 
private DataGridView RunTimeCreatedDataGridView; 

// sample of creating the DataGridView at run-time 
// and adding to the Controls collection of a Form 
// and positioning and sizing 
// fyi: the Form used here is sized 800 by 600 
private void button1_Click(object sender, EventArgs e) 
{ 
    RunTimeCreatedDataGridView= new DataGridView(); 
    RunTimeCreatedDataGridView.Size = new Size(300, 542); 
    RunTimeCreatedDataGridView.Location = new Point(10,12); 
    this.Controls.Add(RunTimeCreatedDataGridView); 
} 

Vous pouvez, bien sûr simplifier le réglage Taille et emplacement en utilisant la propriété Bounds, ou la méthode « SetBounds comme dans:

RunTimeCreatedDataGridView.SetBounds(10,12,300,542); 

Vous pouvez définir d'autres propriétés qui déterminent la taille et l'emplacement « automatiquement » en définissant les propriétés Dock ou d'ancrage. Et vous voudrez probablement "personnaliser" l'apparence visuelle de DataGridView d'une autre manière en ajoutant des appels pour définir BackGroundColor, BorderStyle, etc. au code ci-dessus.

En ce moment, j'espère que vous pensez quelque chose comme: « Qu'en est-il vraiment choses importantes comme la configuration des colonnes, la liaison de données, etc.? » Qu'en est-il de toutes ces merveilleuses fonctionnalités exposées à DesignTime par le "Smart Tag" dans le coin supérieur droit de DataGridView, et dans la fenêtre du navigateur de propriétés.

Voici où nous obtenons général, plutôt que spécifique. Si vous êtes "certain" qu'à un certain point, l'utilisateur au moment de l'exécution voudra créer un DataGridView: pourquoi ne pas le créer à l'avance: le styler visuellement, créer des colonnes, etc., puis le masquer quand les charges de formulaire: puis l'afficher à la demande.

Si vous devez absolument créer un DataGridView à partir de zéro au moment de l'exécution, mais que vous voulez éviter beaucoup de taper: créez d'abord le DataGridView au moment du design, allez dans le Designer.cs fichier et copier le code généré automatiquement qui vous est utile pour le style visuel, en ajoutant et en configurant des colonnes: puis collez ce code dans la méthode ou l'événement où vous créez le DataGridView (oui, vous aurez besoin de «peaufiner un peu).

Puisque, dans ce cas, nous ne savons rien sur ce que vous pourriez ou non lier à DataGridView, nous resterons simplement "maman" sur celui-ci.

Dans (l'étrange? Off hasard?) Le cas peu probable que vous créez plusieurs DataGridViews à l'exécution, vous suggère de maintenir une liste interne d'entre eux dans une variable comme List<DataGridView> et ont une variable nommée currentDataGridView que vous pouvez compter sur pour contenir une référence au DataGridView actuellement actif (a le focus, est visible, etc.). Dans tous les cas, je recommande d'utiliser "déconner" avec un DataGridView en mode conception, puis d'examiner le code produit dans le fichier Designer.cs (mais sans jamais le modifier!) Pour obtenir des informations rapides sur l'utilisation diverses fonctionnalités de DataGridView. Et pour les principaux exemples de liaison d'un DataGridView à DataSources complexes et de mise en forme: consultez CodeProject pour les articles pertinents, conseils, etc

"Récoltez" ce dont vous avez besoin du code généré automatiquement dans le fichier Designer.cs, puis, Lorsque vous êtes prêt, supprimez l'instance DataGridView sur un formulaire et "faites votre propre chose" lors de l'exécution.

Questions connexes