【问题标题】:How to define a constant size for specific Cells in a DataGridView?如何为 DataGridView 中的特定单元格定义恒定大小?
【发布时间】:2019-06-18 05:00:15
【问题描述】:

我想保持 DataGridView 的所有行和列的大小不变。

这是我正在使用的代码:

table.Columns.Add("SR.NO", typeof(int));
table.Columns.Add("NAME", typeof(int));
table.Columns.Add("CLASS", typeof(int));
table.Columns.Add("ROLL NO", typeof(int));
table.Columns.Add("GR.NO", typeof(int));
table.Columns.Add("ADHAAR CARD UID", typeof(int));
table.Columns.Add("GENDER", typeof(int));
table.Columns.Add("CONTACT", typeof(int));
table.Columns.Add("ADDRESS", typeof(int));
dataGridView1.DataSource = table;

【问题讨论】:

  • 可以制作列,使其无法调整大小,不确定行。但是...但是...名称和地址是否为 Int?非常铁杆
  • @NatPongjardenlarp 大声笑...我只是复制粘贴了第一个然后更改了它,但是尽管我知道要更改类型但还是有疑问。那么我能做些什么来让它们按我想要的大小调整是不是有任何代码呢?
  • 恒定大小是什么意思?你能证明当前网格布局的问题吗?
  • @defaultlocale 我希望 SR.NO 的第一列在水平方向上有点小,并且名称 Column 对于其余列来说是大的和相同的。

标签: c# .net winforms datagridview


【解决方案1】:

我做了一个快速演示项目,展示了如何使用 RowTemplate 属性来禁用行大小调整(请参阅MSDN)。

public partial class frmDataGridView : Form
{
    public frmDataGridView()
    {
        InitializeComponent();
    }

    private void frmDataGridView_Load(object sender, EventArgs e)
    {
        // disable resizing of rows
        dataGridView1.RowTemplate.Resizable = DataGridViewTriState.False;

        dataGridView1.RowTemplate.Height = 75; // set to preferred (your personal) default

        // datasource - structure
        DataTable table = new DataTable();
        table.Columns.Add("SR.NO", typeof(int));
        table.Columns.Add("NAME", typeof(int));
        table.Columns.Add("CLASS", typeof(int));
        table.Columns.Add("ROLL NO", typeof(int));
        table.Columns.Add("GR.NO", typeof(int));
        table.Columns.Add("ADHAAR CARD UID", typeof(int));
        table.Columns.Add("GENDER", typeof(int));
        table.Columns.Add("CONTACT", typeof(int));
        table.Columns.Add("ADDRESS", typeof(int));

        // datasource - data
        table.Rows.Add(1, 1, 1, 1, 1, 1, 1, 1, 1);

        dataGridView1.DataSource = table;

        dataGridView1.Columns[0].Width = 40; // set a specific width for first column in DataGridView
    }
}

这将产生一个带有如下 datagridview 的表单:

您可以为所需的每一列设置 Width 属性(请参阅DataGridViewColumn.Width)。

【讨论】:

  • 我不能单独定义列的大小吗?例如。 SR.NO 列横向较小,但 NAME 列较大,同样适用于其他列
  • 您可以为每个所需的 datagridview 列设置宽度 - 请参阅编辑后的答案
【解决方案2】:

您可以指定用户是否可以调整列和行的大小,设置AllowUserToResizeColumnsAllowUserToResizeRows 属性:

dataGridView1.AllowUserToResizeColumns = false;
dataGridView1.AllowUserToResizeRows = false;

您还需要禁用自动调整列大小功能(AutoResizeColumns 属性),以便您可以指定自定义度量:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.None);
dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;

禁用列和行的wrap mode

dataGridView1.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;
dataGridView1.RowTemplate.DefaultCellStyle.WrapMode = DataGridViewTriState.False;

RowTemplate 设置为一些特定的值;当没有指定其他样式时使用此样式。当宿主窗体更改自己的样式时,防止网格更改其样式(可能还有布局)非常有用:
(字体和单元格的ForeColorBackColor 都很重要)

dataGridView1.RowTemplate.DefaultCellStyle.Font = 
    new Font("Segoe UI", 9.25f, FontStyle.Regular, GraphicsUnit.Point);
dataGridView1.RowTemplate.DefaultCellStyle.BackColor = Color.White;
dataGridView1.RowTemplate.DefaultCellStyle.ForeColor = Color.Black;
dataGridView1.RowTemplate.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight;
dataGridView1.RowTemplate.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText;

如果您需要特定的行,您可以确定行的高度。注意不能将行高设置为字体的确切大小,否则 CheckBox 和 ComboBox 等控件将不适合并且不会被绘制。
在这里,我使用TextRenderer.MeasureText 方法来测量使用RowTemplate.DefaultCellStyle.Font 中设置的Font 的字符串。

dataGridView1.RowHeadersWidth = 40;
dataGridView1.RowTemplate.Height = TextRenderer.MeasureText(
    "Sample Text", dataGridView1.RowTemplate.DefaultCellStyle.Font).Height + 4;

由于环绕模式被禁用,您可以只使用AutoSizeRowsMode,将其设置为DataGridViewAutoSizeRowsMode.AllCells

现在,在设置 DataGridView.DataSource 之后,您还可以将所有列的宽度设置为相同的值(或任何其他自定义值):
(这里所有Columns的Width设置为150像素)

dataGridView1.DataSource = [DataTable];
dataGridView1.Columns.OfType<DataGridViewColumn>().ToList().ForEach(c => c.Width = 150);

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多