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

C# 如何在C中调整datagridview中的列大小#,c#,datagridview,C#,Datagridview,我使用以下方法从SQL填充datagridview public bool _MFillGridView(string pQuery, ref DataGridView _pDgv) { using (DataTable dt = new DataTable()) { using (SqlConnection con = new SqlConnection(_CObjectsofClasses._obj_CConnectionString._MGetConnect

我使用以下方法从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;
}
在这里,我是这样使用的

_MFillGridView("My SQL query here", ref MydatagridviewToFill);
上面的代码工作得很好,但我面临列宽问题。我想传递列索引和
DataGridViewAutoSizeColumnMode
以及列宽来调整列的大小,如

coloumn[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
coloumn[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
coloumn[2].Width = 200;
所有其他未提供的列应设置为
AutoSizeMode=DataGridViewAutoSizeColumnMode.NotSet


请建议我修改代码。

基于我对上述问题的理解,我相信这就是您想要的

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;
        }
    }
}
private void ResizeColumns(DataGridView gridview、int column、int width、DataGridViewAutoSizeColumnMode)
{
对于(int i=0;i
更新 好的,我仍然不确定我是否理解你的意图,但我认为这可能会为你指明正确的方向

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;
}
public bool\u MFillGridView(字符串pQuery,ref DataGridView\u pDgv,int columnIndex,int width)
{
使用(var dt=new DataTable())
{
//…从数据库检索数据的代码。。。
对于(var i=0;i
我用@Mo Patel解决了我的问题,我只是将int columnIndex,int width改为List columnIndex,List width

这是一列(不是你一直拼写的冒号),你是对的,但这只是一列,而不是多列……请参考我在示例中的问题,我使用的是3列,即[0]列[1]列[2]。我想传递列列表、宽度列表、自动缩放模式列表“仅1列”是什么意思?它是一个循环,因此所有列都将以某种方式处理。另一方面,如果您的意思是您只希望格式化特定的列列表,那么我可以为您更新方法是的,先生,我希望在MFillGridView方法中传递参数,并且您提供的循环应该在MFillGridView中。我怎么做,请更新你的答案。好的,我已经更新了代码,仍然不确定你指的是什么参数。好的,我用你的代码解决了我的问题,我只是将int columnIndex,int width更改为List columnIndex,List width。谢谢你的帮助和+1