简体   繁体   English

如何在C#中调整datagridview中的列大小

[英]how to resize columns in datagridview in C#

I am using following method to fill datagridview from SQL 我正在使用以下方法从SQL填充datagridview

public bool _MFillGridView(string pQuery, ref DataGridView _pDgv)
{
    using (DataTable dt = new DataTable())
    {
        using (SqlConnection con = new SqlConnection(_CObjectsofClasses._obj_CConnectionString._MGetConnectionString()))
        {
            using (SqlCommand cmd = new SqlCommand(pQuery, con))
            {
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(dt);
                    _pDgv.DataSource = dt;
                    _pDgv.Cursor = System.Windows.Forms.Cursors.Default;
                }
            }
        }

        foreach (DataColumn DC in dt.Columns)
        {
            _pDgv.Columns[DC.ColumnName].SortMode = DataGridViewColumnSortMode.NotSortable;

            if (DC.DataType == typeof(DateTime))
            {
               _pDgv.Columns[DC.ColumnName].DefaultCellStyle = new DataGridViewCellStyle { Format = _pDateFormat };
               _pDgv.Columns[DC.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }
            else if (DC.DataType == typeof(decimal))
            {
               _pDgv.Columns[DC.ColumnName].DefaultCellStyle = new DataGridViewCellStyle { Format = _CObjectsofClasses._obj_CNumbricFunction._MFormatNo("0") };
            }
        }
    }

    return true;
}

and here I am using like this; 而我在这里这样使用;

_MFillGridView("My SQL query here", ref MydatagridviewToFill);

above code works perfectly but I am facing column width problems. 上面的代码可以正常工作,但是我面临列宽问题。 I want to to pass column index and DataGridViewAutoSizeColumnMode and column width to resize columns like 我想传递列索引和DataGridViewAutoSizeColumnMode和列宽来调整列大小

coloumn[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
coloumn[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
coloumn[2].Width = 200;

and all other columns which are not provided should be set to AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet; 并且未提供的所有其他列应设置为AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

please suggest me to what I change in code. 请向我建议我要更改的代码。

Based on my understanding of your question above, I believe this is what you want? 根据我对以上问题的理解,我相信这是您想要的?

private void ResizeColumns(DataGridView gridview, int column, int width, DataGridViewAutoSizeColumnMode mode)
{
    for (int i = 0; i < gridview.ColumnCount; i++)
    {
        if (i.Equals(column))
        {
            gridview.Columns[i].AutoSizeMode = mode;
            gridview.Columns[i].Width = width;
        }
        else
        {
            gridview.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
        }
    }
}

Update 更新

Ok still not sure I understand what you are after but I think this may point you in the right direction 好的,仍然不确定我了解您的要求,但是我认为这可能会为您指明正确的方向

public bool _MFillGridView(string pQuery, ref DataGridView _pDgv, int columnIndex, int width)
{
    using (var dt = new DataTable())
    {
        // ... Code to retrieve data from Database ...

        for (var i = 0; i < dt.Columns.Count; i++)
        {
            var column = dt.Columns[i];
            if (column.DataType == typeof (DateTime))
                _pDgv.Columns[column.ColumnName].DefaultCellStyle = new DataGridViewCellStyle {Format = _pDateFormat};
            else if (column.DataType == typeof (decimal))
                _pDgv.Columns[column.ColumnName].DefaultCellStyle = new DataGridViewCellStyle {Format = _CObjectsofClasses._obj_CNumbricFunction._MFormatNo("0")};

            // Do your DataGridView formatting here
            if (_pDgv.Columns[column.ColumnName].Index.Equals(columnIndex)) // Check your Column index on the control
            {
                _pDgv.Columns[column.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            }
            else
            {
                _pDgv.Columns[column.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
                _pDgv.Columns[column.ColumnName].Width = width;
            }
        }
    }
    return true;
}

我使用@Mo Patel解决了我的问题,我只是将int columnIndex,int width更改为List columnIndex,List width

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM