如何在块中显示DataGridView行-Visual C#

如何在块中显示DataGridView行-Visual C#,c#,datagridview,C#,Datagridview,我有一个程序,可以从MySQL数据库获取数据并将其显示到DataGridView。因为每一行都是可以下载的应用程序,所以我希望每一行都显示在它自己的小块中。这是我想要的一个小草图: 显示的每个框都是一行。每个部分(图标、应用程序名称、说明、下载BTN)都是一列。 有人知道怎么做吗?列表视图不支持数据绑定,而数据网格视图只显示行和列的矩阵,因此不能并排显示行数据 我建议取消您的DataGridview 相反,您将数据绑定到另一个合适的容器上,并用显示数据的UserControl填充该容器。自动滚动

我有一个程序,可以从MySQL数据库获取数据并将其显示到DataGridView。因为每一行都是可以下载的应用程序,所以我希望每一行都显示在它自己的小块中。这是我想要的一个小草图:

显示的每个框都是一行。每个部分(图标、应用程序名称、说明、下载BTN)都是一列。
有人知道怎么做吗?

列表视图不支持
数据绑定
,而
数据网格视图
只显示行和列的矩阵,因此不能并排显示行数据

我建议取消您的
DataGridview

相反,您将数据绑定到另一个合适的容器上,并用显示数据的
UserControl
填充该容器。
自动滚动
FlowLayoutPanel
可能是最佳选择

因此,您创建了一个名为
DataBox
UserControl
,添加了一些
标签
按钮
,以及一个额外的构造函数,可以从
数据表.DataRow
加载数据

然后编写一个加载函数,该函数为表中的每一行创建一个新的
DataBox
,并将其字段加载到标签中

然后从数据发生变化的所有点调用函数,比如
DataTable
RowChanged
事件

下面是一个简单的示例类:

这是一个加载函数,用于加载表中的所有行:

void loadBoxes()
{
    List<DataBox> boxes = new List<DataBox>();
    foreach (DataRow row in DT.Rows)
        boxes.Add(new DataBox(row) { ButtonClick = boxButton_Click } );
    flowLayoutPanel1.Controls.Clear();
    flowLayoutPanel1.Controls.AddRange(boxes.ToArray());
    boxes.Clear();
}
当然,您也可以在
数据框
类中对其右键单击进行编码


您可能需要改进其他几点,例如更新单行或使
标签
将焦点发送到
按钮
,从而使
背景色
显示“选择”…

为此,请使用
列表视图
控件。。。链接:不要为此使用
DataGridView
。@nelek知道如何将MySQL数据从MySQL连接器绑定到ListView吗?ListView是参差不齐的数组,不容易绑定。在CellPaint事件中,您始终可以尝试拥有绘制单元格。。
private void DT_RowChanged(object sender, DataRowChangeEventArgs e)
{
    loadBoxes();
}
void loadBoxes()
{
    List<DataBox> boxes = new List<DataBox>();
    foreach (DataRow row in DT.Rows)
        boxes.Add(new DataBox(row) { ButtonClick = boxButton_Click } );
    flowLayoutPanel1.Controls.Clear();
    flowLayoutPanel1.Controls.AddRange(boxes.ToArray());
    boxes.Clear();
}
private void boxButton_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    DataBox box = btn.Parent as DataBox;
    if (box != null)
        Console.WriteLine(box.rowID + " clicked");
}