如何动态地在C#windows应用程序中的DataGridView单元格中添加表?

时间:2013-04-26 14:46:28

标签: c# winforms datagridview windows-applications

我正在用C#开发一个Windows应用程序,我有一个DataGridView,目前显示数据源的值。我想添加一个列,其中每一行都有一个表。现在有没有办法动态地这样做?因为表格结构在每一行都会有所不同。

提前感谢。

编辑: - 我的意思是,我想动态地在单元格中插入一个表格。

enter image description here

当我尝试在每行中动态添加Entity Details时,您可以看到TableLayoutPanel列显示此内容。

5 个答案:

答案 0 :(得分:1)

1)。试用MSDN的Mark Ridout的TreeGridView并阅读他的article使用它。

enter image description here

另请参阅使用Mark Ridout的TreeGridView的CodeProject DataGridView with Hierarchical Data Binding是否有用。

2)。如果免费控制不起作用,请看看第三方(我不隶属于这些公司):

Devexpress XtraGrid
Telerik Gridview
Infragistics Grid
VIBlend DataGridView for WinForms
Janus Grid
xceed's Grid


3)。我很确定将一个TablePanelLayout添加到一个Grids单元格中你想要什么,这是代码,这样你就可以看到它对你自己有多么狡猾:

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;

答案 1 :(得分:0)

有这篇文章:How to: Host Controls in Windows Forms DataGridView Cells

MSDN

DataGridView控件提供多种列类型,使您的用户可以通过多种方式输入和编辑值。 如果这些列类型无法满足您的数据输入需求, ,您可以创建自己的列类型,其中的单元格可以托管您选择的控件

为此,您必须定义从DataGridViewColumn和DataGridViewCell 派生的 类。

您还必须定义一个派生自Control的类, 实现IDataGridViewEditingControl 界面。

所以我建议,首先使用属性或方法将表作为独立控件 然后使用该控件显示每一行 - 当您进行数据绑定时,让每一行为您的TableControl设置数据。

替代方法 可能就是这样(假设您没有在网格中编辑) - 您可以像usercontrol一样创建一行(创建一个usercontrol,其中包含所有文本框或标签)像datagridrow样式一样放置它们,使它看起来像一行),然后在带有滚动条的面板中添加它们。

答案 2 :(得分:0)

我不认为微软可以(轻松)使用开箱即用的控件。

如果您有预算,也许可以查看Telerik的控件。

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

他们有一个gridview控件作为他们的.NET WinForm控件的一部分,看起来它会做你想要的。

否则,是否可以更改您的体系结构并使用基于ASP.NET的Web方法来解决此问题?

希望有所帮助。祝你好运。

答案 3 :(得分:0)

根据我的说法,在DataGridView中添加一个包含表格的列是不可能的。 您的问题的最佳替代方法是通过自己创建动态表并重复行以显示您的数据,并且在该行中您可以将其中的表格放在其中。

答案 4 :(得分:0)

您可以使用RowDatabound事件将表添加到单元格控件集合中。像这样的例子(抱歉 - 与你正在做的不同,但可能与你想要的相似,也在VB而不是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.ToString
            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