我想用 动态创建一个类似 excel 的表datagridview
,但我希望可以选择设置colspan
为某些列。
这个想法只是为了显示数据,用户不会输入任何东西,但它应该是表格/电子表格的样子。如果我不能使用datagridview
,colspan
是否有任何其他类型的类似表格的工具具有colspan
?
另一方面,这些列将根据数据库查询结果动态创建。
我正在使用 Windows 窗体。
有任何想法吗?
我想用 动态创建一个类似 excel 的表datagridview
,但我希望可以选择设置colspan
为某些列。
这个想法只是为了显示数据,用户不会输入任何东西,但它应该是表格/电子表格的样子。如果我不能使用datagridview
,colspan
是否有任何其他类型的类似表格的工具具有colspan
?
另一方面,这些列将根据数据库查询结果动态创建。
我正在使用 Windows 窗体。
有任何想法吗?
你可以看看TableLayoutPanel 类,它有一个TableLayoutPanel.SetColumnSpan 方法。
这是一个代码示例,它跨越了 2 列中的一个文本框:
var dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Value1");
dt.Columns.Add("Value2");
dt.Rows.Add(1, "aa", "xx");
dt.Rows.Add(2, "bb","yy");
dt.Rows.Add(3, "cc", "zz");
tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
tableLayoutPanel1.ColumnCount = 4;
tableLayoutPanel1.AutoSize = true;
for (int i = 0; i < dt.Columns.Count; i++)
{
var l = new Label();
l.Dock = DockStyle.Fill;
l.Text = dt.Columns[i].ColumnName;
tableLayoutPanel1.Controls.Add(l, i, 0);
}
var emptyLabel = new Label();
emptyLabel.Text = "Empty label";
tableLayoutPanel1.Controls.Add(emptyLabel, 4, 0);
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Rows[i].ItemArray.Length; j++)
{
var tb = new TextBox();
tb.Multiline = true;
tb.Dock = DockStyle.Fill;
tb.Text = dt.Rows[i][j].ToString();
tableLayoutPanel1.Controls.Add(tb, j, i+1);
if (i == 1 && j == 2)
tableLayoutPanel1.SetColumnSpan(tb, 2);
}
}