c# - 如何在 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._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;
        }
    }
}

更新

好吧,仍然不确定我明白你在追求什么,但我认为这可能会为你指明正确的方向

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;
}

关于c# - 如何在 C# 中调整 datagridview 中的列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26283517/

相关文章:

c# - 是否可以在 datagridview 中切换行和列?

vb.net - 如何在使用 VB.NET 在 DataGridView 中编辑单元格时获取当前列索引

c# - 触摸相对于屏幕的位置。 Windows手机

c# - 加载 WPF 组合框的数据集

c# - 如何从网络摄像头捕捉视频?

c# - 在列中的 DataGridView 中搜索值

c# - 使用自定义 UserControl 作为 DataGridView 中的列

c# - 在 C# 的属性设置中使用 virtual 和 protected 关键字?

c# - 将 SqlException.Message 打印到控制台的安全性

c# - 使用 C# 在 Windows 窗体应用程序上读取和显示 CSV 文件中的数据