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

时间:2016-11-04 16:41:41

标签: c# datagridview

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

显示的每个框都是一行。每个部分(图标,应用程序名称,描述,downloadbtn)都是一列。 有谁知道怎么做?

1 个答案:

答案 0 :(得分:2)

ListViews不支持DataBindingDataGridviews只支持显示行和列矩阵,因此它们无法并排显示行数据。

我建议您取消DataGridview

而是将数据绑定到合适的其他容器,并使用显示数据的UserControl填充该容器。 AutoScrolling FlowLayoutPanel可能是最佳选择。

所以你创建了一个名为UserControl的{​​{1}},添加了一些DataBoxLabels以及一个可以从{{{{}}加载数据的额外构造函数1}}。

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

然后,您可以从数据发生变化的所有位置调用该函数,例如DataTable.DataRow的{​​{1}}事件。

这是一个最小的示例类:

enter image description here

DataBox

当数据更改时,显示屏将刷新:

RowChanged

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

DataTable

public delegate void ButtonClick(object sender, EventArgs e); public partial class DataBox : UserControl { public DataRow row { get; set; } public ButtonClick ButtonClick { private get; set; } public DataBox() { InitializeComponent(); } public DataBox(DataRow row) { InitializeComponent(); loadRow(row); button1.GotFocus += (s, e) => { BackColor = Color.SkyBlue; }; button1.LostFocus += (s, e) => { BackColor = Color.Azure; }; } public void loadRow(DataRow row_) { if (row_ == null || row_.ItemArray.Length < 3) return; row = row_; label1.Text = row.ItemArray[0].ToString(); label2.Text = row.ItemArray[1].ToString(); label3.Text = row.ItemArray[2].ToString(); } private void button1_Click(object sender, EventArgs e) { if (ButtonClick != null) ButtonClick(sender, e); } } 正在以您的形式调用中央点击处理功能:

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(); } 课程中对其点击进行编码..

您可能希望改进其他几点,例如更新单行或将Buttons发送焦点转移到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"); } ,从而导致DataBox显示“选择” ..