此winform的目的是显示DataTable
,以便tableLayoutPanel1
中的每一列都由四个单元格组成;每个人都有以下四种颜色。每个单元格都有 WorkNum 。
我知道将显示多少行(在本例中为四行),但我希望控件能够管理将显示多少列。我遇到的问题是,我不知道如何设置FlowLayoutPanel
或TableLayoutPanel
,以便每列有四行。换句话说,我可以设置rowCount,但不能设置columnCount
DataTable
如下所示:
Color WorkNum
-------------------
Yellow 4304
Blue 4593
Green 4346
Orange 8775
Yellow 8464
Blue 3515
Green 5426
Orange 9452
Yellow 2012
Blue 0546
Green 0551
Orange 0144
dataGridView1
和tableLayoutPanel
的winform看起来像这样。一切正常; 唯一问题是我需要设置rowCount:
public partial class FormMonitor : Form
{
DataGridView dataGridView1 = new DataGridView();
public FormMonitor()
{
InitializeComponent();
FillGrid();
}
private void FillGrid()
{
DataTable tableColors = GetData(connString);
dataGridView1.DataSourceChanged += dataGridView1_DataSourceChanged;
dataGridView1.DataSource = tableColors;
}
private void dataGridView1_DataSourceChanged(object sender, EventArgs e)
{
DataTable dt = (DataTable)dataGridView1.DataSource;
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.SuspendLayout();
foreach (DataRow row in dt.Rows)
{
UcColor ucb = new UcColor(row, tableLayoutPanel1);
tableLayoutPanel1.Controls.Add(ucb);
}
tableLayoutPanel1.ResumeLayout();
}
}
用户控件如下所示:
public partial class UcColor : UserControl
{
public UcColor()
{
InitializeComponent();
}
public UcColor(DataRow row, TableLayoutPanel CellsFLP)
{
InitializeComponent();
this.BackColor = Color.FromName(row["color"].ToString());
label1.Text = row["WorkNum"].ToString();
this.DoubleBuffered = true;
}
}
我最初以FlowLayoutPanel
开始,并且在正确的高度(足够高度以适应四个细胞),它就像一个魅力。但是一旦高度太高,那么一切都会四处移动。
如果我可以使用现有代码,我将不胜感激。出于此示例之外的原因,我无法使用DataGridView
。
这就是它需要的样子。使用当前代码,一切都正确,但我无法设置要显示的行数。
感谢任何帮助。 感谢。