引言

在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的。

方法

建一个用于测试的Person类

     public class Person
{
[Description("姓名")]
public string Name { get; set; }
[Description("性别")]
public string Gender { get; set; }
[Description("地址")]
public string Address { get; set; }
}

winform绑定数据源,及自适应列宽代码

   public partial class PersonInfoForm : Form
{
public PersonInfoForm()
{
InitializeComponent();
}
int width = ;
private void PersonInfoForm_Load(object sender, EventArgs e)
{
List<Person> list = new List<Person>() {
new Person(){Name="张三",Gender="男",Address="北京市 海淀区 大钟寺"},
new Person(){Name="李斯",Gender="男",Address="上海市"},
new Person(){Name="王二",Gender="女",Address="河南省 郑州市 二七广场附近"},
new Person(){Name="王二",Gender="女",Address="河南省 郑州市 "},
new Person(){Name="王二",Gender="女",Address="河南省"}
};
//绑定数据源的做法和原来相同
dgViewPersons.DataSource = list;
//对于DataGridView的每一个列都调整
for (int i = ; i < this.dgViewPersons.Columns.Count; i++)
{
//将每一列都调整为自动适应模式
this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);
//记录整个DataGridView的宽度
width += this.dgViewPersons.Columns[i].Width;
}
//判断调整后的宽度与原来设定的宽度的关系,如果是调整后的宽度大于原来设定的宽度,
//则将DataGridView的列自动调整模式设置为显示的列即可,
//如果是小于原来设定的宽度,将模式改为填充。
if (width > this.dgViewPersons.Size.Width)
{
this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
}
else
{
this.dgViewPersons.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
//冻结某列 从左开始 0,1,2
dgViewPersons.Columns[].Frozen = true; }
}

主要用到了DataGridViewAutoSizeColumnMode枚举,也可以通过设置DataGridView的属性来实现

  // 摘要:
// 定义用于指定如何调整列宽的值。
public enum DataGridViewAutoSizeColumnMode
{
// 摘要:
// 列的大小调整行为从 System.Windows.Forms.DataGridView.AutoSizeColumnsMode 属性继承。
NotSet = ,
//
// 摘要:
// 列宽不会自动调整。
None = ,
//
// 摘要:
// 调整列宽,以适合列标题单元格的内容。
ColumnHeader = ,
//
// 摘要:
// 调整列宽,以适合该列中的所有单元格的内容,不包括标题单元格。
AllCellsExceptHeader = ,
//
// 摘要:
// 调整列宽,以适合该列中的所有单元格的内容,包括标题单元格。
AllCells = ,
//
// 摘要:
// 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,不包括标题单元格。
DisplayedCellsExceptHeader = ,
//
// 摘要:
// 调整列宽,以适合当前屏幕上显示的行的列中的所有单元格的内容,包括标题单元格。
DisplayedCells = ,
//
// 摘要:
// 调整列宽,使所有列的宽度正好填充控件的显示区域,只需要水平滚动保证列宽在 System.Windows.Forms.DataGridViewColumn.MinimumWidth
// 属性值以上。 相对列宽由相对 System.Windows.Forms.DataGridViewColumn.FillWeight 属性值决定。
Fill = ,
}

结果

没设置自适应列宽的

使用自适应列宽的

总结

用到的东西很简单,只是在项目中用到了,对winform使用较少,就研究上网查了一下,这样可以提高用户体验,既然用到了就记录一下,方便自己,也方便他人。

参考:

http://blog.csdn.net/ou_yangpengfei/article/details/6051701

其他网络资源

[Winform]DataGridView列自适应宽度的更多相关文章

  1. DataGridView列自适应宽度

    来源:http://www.cnblogs.com/wolf-sun/p/3480104.html 在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属 ...

  2. [WinForm]DataGridView列自适应

    关键代码: /// <summary> /// 根据cell内容调整其宽度 /// </summary> /// <param name="girdview&q ...

  3. DataGridView 列自适应宽度 设置

    代码: Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 或者设置DataGridView的AutoSizeColu ...

  4. DataGridView列的宽度、行的高度自动调整

    注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...

  5. 转:DataGridView列的宽度、行的高度自动调整

    注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...

  6. [WinForm]DataGridView列头右键菜单

    [WinForm]DataGridView列头右键菜单 前言 继续"不误正业" - - #,记录一下.有时候有这样的需求:DataGridView的列头菜单可以选择具体显示哪些列, ...

  7. Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  8. POI 实现合并单元格以及列自适应宽度

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  9. Winform DataGridView列的单元格中动态添加图片和文字

    先上图在说,第二列中图片和文字的样式 1.需要重写DataGridViewTextBoxColumn,新建类TextAndImageColumn.cs using System; using Syst ...

随机推荐

  1. Gradle tip #1: tasks

    With this post I would like to start series of Gradle-related topics I wish I knew when I first star ...

  2. Bootstrap系列 -- 22. 按钮详解

    Bootstrap框架首先通过基础类名“.btn”定义了一个基础的按钮风格,然后通过“.btn-default”定义了一个默认的按钮风格.默认按钮的风格就是在基础按钮的风格的基础上修改了按钮的背景颜色 ...

  3. 约瑟夫环的java解决

    总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...

  4. xsd、wsdl生成C#类的命令行工具使用方法

    1.xsd生成C#类命令 示例:xsd <xsd文件路径> /c /o:<生成CS文件目录> <其他参数> 参数说明: /c 生成为cs文件,/d 生成DataSe ...

  5. 取当前的地址栏的Url和url中的参数

    看到这样一段代码: exports.showLogin = function (req, res) { req.session._loginReferer = req.headers.referer; ...

  6. 关于Chrome的开发15个小技巧

    一.快速查找文件 如果你使用过Sublime,那么你会知道’Go to anything’的强大.没错,Chrome现在也有了这一功能. 操作如下: 1.F12打开你的Chrome调试器: 2.按下C ...

  7. 第六章:Javascript对象

    对象是javascript的基本数据类型.对象是一种复合值.它将很多值(原始值 或者其他对象)聚合在一起.可通过名字访问这些值.对象也可以看做是属性的无序集合,每个属性都有一个名/值.属性名是字符串, ...

  8. 小心as"陷阱"(c#)

    有一种情况,使用as编译时没错,运行时也没错,但是结果错了. object a=1; string b=a as String; 由于a是objecy类型,是引用类型,所以可以用as转换,但是实际上b ...

  9. at org.apache.catalina.loader.WebappClassLoader.loadClass问题处理

    在连接oracle数据库时,正常的java application可以连接,但是到javabean web中就出错,说是Class.forName(dirver)找不到驱 动,问题是,我将oracle ...

  10. overlay-3

    if(typeof Shadowbox=="undefined"){ throw"Unable to load Shadowbox, no base library ad ...