Comment append une table dans une cellule de DataGridView dans l’application Windows C # dynamicment?

Je développe une application Windows en C #, j’ai un DataGridView , affichant actuellement les valeurs d’une source de données. Je veux append une colonne dans laquelle chaque ligne aura une table. Maintenant, existe-t-il un moyen de le faire de manière dynamic? parce que la structure de la table variera dans chaque ligne.

Merci d’avance.

Edit: – Je veux dire, je veux insérer une table dans une cellule, dynamicment.

entrer la description de l'image ici

Comme vous pouvez voir la colonne Entity Details montrant cela lorsque j’ai essayé d’append TableLayoutPanel , dans chaque ligne dynamicment.

1). Essayez le TreeGridView de MSDN, Mark Ridout, et lisez son article sur son utilisation.

entrer la description de l'image ici

Voyez également si ce DataProject DataCridView avec liaison de données hiérarchique utilisant le TreeGridView de Mark Ridout est utile.

2). Si les contrôles gratuits ne fonctionnent pas, consultez les tiers (je ne suis pas affilié à ces sociétés):

Devexpress XtraGrid
Telerik Gridview
Grille Infragistique
VIBlend DataGridView pour WinForms
Grille de Janus
la grid de xceed


3). Je suis sûr que l’ajout de TablePanelLayout dans une cellule Grids n’est pas ce que vous voulez, voici le code pour que vous puissiez voir à quel point c’est bizarre:

 DataTable dt = new DataTable(); dt.Columns.Add("name"); for (int j = 0; j < 10; j++) { dt.Rows.Add(""); } this.dataGridView1.DataSource = dt; this.dataGridView1.Columns[0].Width = 200; //add tableLayoutPanel1 into the control collection of the DataGridView this.dataGridView1.Controls.Add(tableLayoutPanel1); //resize the row this.dataGridView1.Rows[1].Height = 100; //set its location and size to fit the cell tableLayoutPanel1.Location = this.dataGridView1.GetCellDisplayRectangle(0,1, true).Location; tableLayoutPanel1.Size = this.dataGridView1.GetCellDisplayRectangle(0, 1, true).Size; 

Je ne pense pas que cela soit (facilement) possible avec les contrôles fournis par Microsoft.

Si vous avez le budget, consultez peut-être les contrôles de Telerik.

http://www.telerik.com/products/winforms/gridview.aspx

Ils ont un contrôle gridview dans le cadre de leurs contrôles .NET WinForm qui semblent faire ce que vous voulez.

Sinon, est-il possible de modifier votre architecture et de procéder à une approche Web ASP.NET pour résoudre ce problème?

J’espère que cela pourra aider. Bonne chance.

Il existe cet article: Comment: contrôler les hôtes dans les cellules DataGridView de Windows Forms

sur MSDN

Le contrôle DataGridView fournit plusieurs types de colonnes, permettant à vos utilisateurs d’entrer et de modifier les valeurs de différentes manières. Si ces types de colonne ne répondent pas à vos besoins de saisie de données , vous pouvez toutefois créer vos propres types de colonne avec des cellules qui hébergent les contrôles de votre choix .

Pour ce faire, vous devez définir des classes dérivées de DataGridViewColumn et DataGridViewCell .

Vous devez également définir une classe dérivée de Control et implémenter l’ interface IDataGridViewEditingControl .

Je recommande donc, tout d’abord, de faire de votre table un contrôle indépendant avec des propriétés ou une méthode, puis d’utiliser ce contrôle pour chaque ligne: lorsque vous créez une firebase database, laissez chaque ligne définir des données pour votre TableControl.

Une autre approche pourrait être celle-ci (en supposant que vous ne modifiez pas la grid) – vous pouvez créer une seule ligne comme usercontrol (créer un contrôle utilisateur où toutes les zones de texte ou étiquettes sont placées comme des styles de datagridrow pour qu’elle ressemble à une seule ligne) puis vous les ajoutez dans un panneau avec une barre de défilement.

Ajouter une colonne avec une table dans un DataGridView n’est pas possible selon moi. La meilleure alternative à votre question est de créer une table dynamic par auto et de répéter des lignes pour afficher vos données. avec une table à l’intérieur.

Vous pouvez append une table à la collection de contrôles de cellules à l’aide de l’événement RowDatabound. Quelque chose comme cet exemple (désolé – différent de ce que vous faites mais peut-être similaire à ce que vous voulez, également en VB plutôt que C #)

 Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound Dim i As Integer Dim myTable As Table Dim myRow As TableRow Dim mycell As TableCell If e.Row.RowType = DataControlRowType.DataRow Then myTable = New Table myRow = New TableRow For i = 1 To 3 mycell = New TableCell mycell.Text = i.ToSsortingng mycell.BorderStyle = BorderStyle.Solid mycell.BorderWidth = 0.2 mycell.Width = 15 If i = 1 Then mycell.BackColor = Drawing.Color.Beige If i = 2 Then mycell.BackColor = Drawing.Color.Yellow If i = 3 Then mycell.BackColor = Drawing.Color.Green myRow.Cells.Add(mycell) Next myTable.Rows.Add(myRow) e.Row.Cells(12).Controls.Add(myTable) End If End Sub