c# - 使用 Tablelayoutpanel 为 DGW 创建标题行
问题描述
我有一个表格布局面板,下面是一个有 9 列的数据网格视图。我想要实现的是在 tablelayoutpanel 中创建 7 个单元格(或列)。我希望 tablelayoutpanel 中的第一个单元格(或列)跨越 datagridview 的前三列,然后接下来的 6 列(在 tablelayoutpanel 中)与 datagridview 中的其他 6 列对齐。下面是一张展示最终结果的图片:
到目前为止,这是我的代码。正如你所看到的,我还没有走多远。我只是想知道这是否容易做到?如果是这样,有人可以编辑我的代码以使其正常工作吗?考虑到窗口可以调整大小,这是否可能?该项目是在winforms中创建的。
public void SetDummyData()
{
var data = GetDummyData();
var binding = new BindingSource { DataSource = data };
dataGridView1.DataSource = binding;
}
public List<TestData> GetDummyData()
{
return new List<TestData>()
{
new TestData { D1 = "", D2 = "", D3 = "", D4 = "", D5 = "", D6 = "", D7 = "", D8 = "", D9 = "" },
new TestData { D1 = "", D2 = "", D3 = "", D4 = "", D5 = "", D6 = "", D7 = "", D8 = "", D9 = "" },
new TestData { D1 = "", D2 = "", D3 = "", D4 = "", D5 = "", D6 = "", D7 = "", D8 = "", D9 = "" },
new TestData { D1 = "", D2 = "", D3 = "", D4 = "", D5 = "", D6 = "", D7 = "", D8 = "", D9 = "" },
};
}
public void SetTableLayout()
{
EmptyTable();
tableLayoutPanel1.ColumnCount = 7;
tableLayoutPanel1.RowCount = 1;
foreach (DataGridViewColumn c in dataGridView1.Columns)
{
var percentage = GetDGWColumnPercentage(c);
// Cant add percentage here?
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(percentage));
// Then add label
}
}
public void EmptyTable()
{
for (int i = tableLayoutPanel1.Controls.Count - 1; i >= 0; --i)
tableLayoutPanel1.Controls[i].Dispose();
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.RowCount = 0;
}
public double GetDGWColumnPercentage(DataGridViewColumn c)
{
return (c.Width * 100) / dataGridView1.Width;
}
解决方案
这些数字是近似的,可以让您了解如何执行此操作
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication71
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Panel panel1 = new Panel();
panel1.Top = 100;
panel1.Left = 100;
panel1.Width = 600;
panel1.Height = 100;
panel1.BackColor = Color.Blue;
this.Controls.Add(panel1);
Panel panel2 = new Panel();
panel2.Top = 10;
panel2.Left = 20;
panel2.Width = 180;
panel2.Height = 80;
panel2.BackColor = Color.Red;
panel1.Controls.Add(panel2);
Panel panel3 = new Panel();
panel3.Top = 10;
panel3.Left = 220;
panel3.Width = 360;
panel3.Height = 80;
panel3.BackColor = Color.Yellow;
panel1.Controls.Add(panel3);
DataGridView dgv1 = new DataGridView();
dgv1.Left = 100;
dgv1.Top = 200;
dgv1.Width = 600;
dgv1.Height = 300;
this.Controls.Add(dgv1);
DataTable dt = new DataTable();
dt.Columns.Add("Col 1", typeof(string));
dt.Columns.Add("Col 2", typeof(string));
dt.Columns.Add("Col 3", typeof(string));
dt.Columns.Add("Col 4", typeof(string));
dt.Columns.Add("Col 5", typeof(string));
dt.Columns.Add("Col 6", typeof(string));
dt.Columns.Add("Col 7", typeof(string));
dt.Columns.Add("Col 8", typeof(string));
dt.Columns.Add("Col 9", typeof(string));
dgv1.DataSource = dt;
int count = 0;
foreach (DataGridViewColumn col in dgv1.Columns)
{
if (count < 3)
{
col.Width = 60;
}
else
{
col.Width = 40;
}
count++;
}
}
}
}
推荐阅读
- css - 在 tr hover 时只更改一个单元格
- asp.net - 在服务器站点 ASP.NET 中创建对话框确认
- google-sheets - 如何在谷歌表格中对每一天的值求和
- database - 在 PostgreSql 中,如何在更新前删除一条记录以避免重复冲突?
- javascript - 如何在 reactjs 中实现 oAuth?
- spring-boot - 如何在 Spring Boot gradle 中设置 liquibase 的 pro 许可证密钥?
- css - css样式的问题
- json - 如何在 Flutter 中从 JSON 中提取独特的类别?
- jquery - 合并多个无序列表项并将它们转换为选择下拉列表
- firebase - Firebase 云功能:使用事务更新函数中的代码后出现“无法获取默认凭据”错误