3

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

提前致谢。

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

在此处输入图像描述

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

4

5 回答 5

1

1)。试用 MSDN 的 Mark Ridout 的TreeGridView并阅读他关于使用它的文章。

在此处输入图像描述

另请查看此CodeProject DataGridView with Hierarchical Data Binding使用 Mark Ridout 的 TreeGridView 是否有用。

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

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;
于 2013-05-04T06:33:51.667 回答
0

我不认为这(很容易)通过 Microsoft 提供的开箱即用控件实现。

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

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

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

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

希望有帮助。祝你好运。

于 2013-04-30T05:31:41.253 回答
0

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

MSDN

DataGridView 控件提供了多种列类型,使您的用户能够以多种方式输入和编辑值。但是,如果这些列类型不能满足您的数据输入需求,您可以使用包含您选择的控件的单元格创建自己的列类型

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

您还必须定义一个派生自 Control 并实现 IDataGridViewEditingControl接口的类。

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

一种方法可能是这样(假设您不在网格中进行编辑) - 您可以创建像 usercontrol 这样的单行(创建一个用户控件,其中所有文本框或标签都像 datagridrow 样式一样放置在周围,使其看起来像单行)和然后将它们添加到带有滚动条的面板中。

于 2013-04-30T02:44:39.563 回答
0

根据我的说法,在其中添加一个带有表格的列DataGridView是不可能的。. 最好的替代方法是自行创建一个动态表格并重复行以显示您的数据,并且在该行中您当然可以放置一个单元格里面有一张桌子。

于 2013-05-05T19:37:17.443 回答
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
于 2017-08-25T06:03:49.830 回答