[英]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;
}
}
}
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.