public void AutoSizeTable(DataGrid dgData)
{
int numCols = dgData.TableStyles[0].GridColumnStyles.Count;
for (int i = 0; i < numCols; i++)
{
AutoSizeCol(dgData,i);
}
}
private static void AutoSizeCol(DataGrid dgData, int colIndex)
{
int rowNums = ((DataTable)dgData.DataSource).Rows.Count;
Byte[] myByte = System.Text.Encoding.Default.GetBytes(dgData.TableStyles["ROW"].GridColumnStyles
[colIndex].HeaderText);
int textCount = myByte.Length;
int tempCount = 0;
for (int i = 0; i < rowNums; i++)
{
if (dgData[i, colIndex] != null)
{
myByte = System.Text.Encoding.Default.GetBytes(dgData[i, colIndex].ToString().Trim());
tempCount = myByte.Length;
if (tempCount > textCount)
{
textCount = tempCount;
}
}
}
dgData.TableStyles[0].GridColumnStyles[colIndex].Width = textCount * 7;
}
但放进程序后,dgData的值总是为null.请问如何解决此问题
关于c# winform datagrid的列宽如何设置为自动适应内容宽度? 在网上找到的这段代码
答案:2 悬赏:70 手机版
解决时间 2021-02-05 19:20
- 提问者网友:寂寞梧桐
- 2021-02-04 23:55
最佳答案
- 五星知识达人网友:白昼之月
- 2021-02-05 00:02
你找到的这种方法当系统主题的字体大小变更时无法取得正确列宽。
建议你使用Graphics.MeasureString方法来计算文字使用的宽度。
循环你要处理的列的所有字段的值,计算出其中最大宽度,在修改列宽即可。
如果数据量太大,也可以只是计算显示的内容,或者缓冲区中的内容。
建议你使用Graphics.MeasureString方法来计算文字使用的宽度。
循环你要处理的列的所有字段的值,计算出其中最大宽度,在修改列宽即可。
如果数据量太大,也可以只是计算显示的内容,或者缓冲区中的内容。
全部回答
- 1楼网友:白昼之月
- 2021-02-05 01:36
datagridviewcolumn column = datagridview.columns[2];
column.autosizemode = datagridviewautosizecolumnmode.displayedcells;
msdn上源码
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯