当列表绑定到datagridview时修复列宽 [英] fix a columns width when a list is bound to a datagridview

查看:143
本文介绍了当列表绑定到datagridview时修复列宽的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个我已经绑定到datagridview的列表。我希望第一列是一个固定的大小。数据绑定到dataGridView,我似乎找不到一种访问单个colums属性的方法。如果我尝试myDatagridview.colums [0]我得到一个索引的边界,因为它表示列数为0。

  private DataGridView setUpDataGrid(List< NVRlineVal> _NVRData)
{
// setup dataGridView
DataGridView NVRDataGridView = new System.Windows.Forms.DataGridView();
NVRDataGridView.ColumnHeadersHeightSizeMode =
System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
NVRDataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
NVRDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;


NVRDataGridView.Name =NVRDataGridView+ nvrIndex;
NVRDataGridView.RowHeadersWidthSizeMode =
System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
NVRDataGridView.TabIndex = 0;
NVRDataGridView.DataSource = _NVRData;
// var clmn = NVRDataGridView.Columns [0];

返回NVRDataGridView;
}

有关如何仅为这些列之一设置固定列宽度的任何想法,其余的将自动调整?



编辑原始代码,以显示仍然可以工作的更多清理版本

解决方案

我做类似的事情,但是格式化。



问题是网格在数据源的设置之后没有绘制 - 您需要在 DataBindingComplete 事件中进行更改。



这是一些片段....



(从 https: //minisqlquery.svn.codeplex.com/svn/trunk/MiniSqlQuery/QueryForm.cs



- grid def:

  this.gridResults1.AllowUserToAddRows = false; 
this.gridResults1.AllowUserToDeleteRows = false;
this.gridResults1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.ColumnHeader;
this.gridResults1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.gridResults1.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridResults1.Location = new System.Drawing.Point(3,3);
this.gridResults1.Name =gridResults1;
this.gridResults1.ReadOnly = true;
this.gridResults1.Size = new System.Drawing.Size(1023,242);
this.gridResults1.TabIndex = 0;

- 稍后订阅 DataBindingComplete

  grid.DataBindingComplete + = GridDataBindingComplete; 

- 处理事件(这里我修改格式,但尝试更改宽度):

  private void GridDataBindingComplete(object sender,DataGridViewBindingCompleteEventArgs e)
{
DataGridView grid = sender as DataGridView;
if(grid == null)
{
return;
}
DataTable dt = grid.DataSource作为DataTable;
if(dt == null)
{
return;
}

string nullText = _settings.NullText;
string dateTimeFormat = _settings.DateTimeFormat; (int i = 0; i
if(dt.Columns [i] .DataType == typeof(DateTime ))
{
DataGridViewCellStyle dateCellStyle = new DataGridViewCellStyle();
dateCellStyle.NullValue = nullText;
dateCellStyle.Format = dateTimeFormat;
grid.Columns [i] .DefaultCellStyle = dateCellStyle;
}
}
}


I have a list that I have bound to a datagridview. I want the first column to be a fixed size. The data is bound to the dataGridView and I can't seem to find a way to access an individual colums properties. if I try myDatagridview.colums[0] I get an index out of bounds, since it says the columns count is 0.

   private DataGridView setUpDataGrid(List<NVRlineVal> _NVRData)
    {
        //setup dataGridView
        DataGridView NVRDataGridView = new System.Windows.Forms.DataGridView();
        NVRDataGridView.ColumnHeadersHeightSizeMode =
            System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        NVRDataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
        NVRDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;


        NVRDataGridView.Name = "NVRDataGridView" + nvrIndex;
        NVRDataGridView.RowHeadersWidthSizeMode =
            System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
        NVRDataGridView.TabIndex = 0;
        NVRDataGridView.DataSource = _NVRData;
        //var clmn = NVRDataGridView.Columns[0];

        return NVRDataGridView;
    }

Any ideas on how to have a fixed column width for only one of these columns, the rest will autosize?

edited original code, to show a more cleaned up version that still works

解决方案

I do something similar but with formatting.

The problem is that the grid is not drawn after the setting of the data source - you need to do you changes in the DataBindingComplete event.

Here are some snippets....

(from https://minisqlquery.svn.codeplex.com/svn/trunk/MiniSqlQuery/QueryForm.cs)

-- grid def:

        this.gridResults1.AllowUserToAddRows = false;
        this.gridResults1.AllowUserToDeleteRows = false;
        this.gridResults1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.ColumnHeader;
        this.gridResults1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.gridResults1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.gridResults1.Location = new System.Drawing.Point(3, 3);
        this.gridResults1.Name = "gridResults1";
        this.gridResults1.ReadOnly = true;
        this.gridResults1.Size = new System.Drawing.Size(1023, 242);
        this.gridResults1.TabIndex = 0;

-- later on subscribe to DataBindingComplete event:

grid.DataBindingComplete += GridDataBindingComplete;

-- handle the event (here I am modifying the format but you try changing the width):

    private void GridDataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        DataGridView grid = sender as DataGridView;
        if (grid == null)
        {
            return;
        }
        DataTable dt = grid.DataSource as DataTable;
        if (dt == null)
        {
            return;
        }

        string nullText = _settings.NullText;
        string dateTimeFormat = _settings.DateTimeFormat;

        for (int i = 0; i < dt.Columns.Count; i++)
        {
            if (dt.Columns[i].DataType == typeof (DateTime))
            {
                DataGridViewCellStyle dateCellStyle = new DataGridViewCellStyle();
                dateCellStyle.NullValue = nullText;
                dateCellStyle.Format = dateTimeFormat;
                grid.Columns[i].DefaultCellStyle = dateCellStyle;
            }
        }
    }

这篇关于当列表绑定到datagridview时修复列宽的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆