有没有办法让DataGridView适合colums/rows的宽度和高度?我找到了需要手动计算的解决方案:http://www.codeguru.com/csharp/.net/net_data/datagrid/article.php/c9603 DataGridView真的不支持这个功能吗?
恕我直言,这是一个很老的问题,被误解了。Idsa 想要实现的是让实际的AutoSizewinforms 功能能够与 DataGridView 一起使用。该属性存在,但没有任何作用。
这意味着 DataGridView 必须适合其内容,而不是其内容必须适合DataGridView内部。
要实现 AutoSize 实现,需要考虑很多事情。DataGridView 的大小取决于很多标准:
最好的方法是选择一组适合您的特定场景的标准,并编写一些可以为您计算 DataGridView 大小的内容。
这里以我的具体场景为例:
我的网格是数据绑定的。因此,每次 DataBinding 操作完成时,它的大小都会发生变化。这是触发重新计算 DataGridView 大小的条件。所以我把它和这个DataBindingComplete事件联系起来。
我的网格不应该显示滚动条。所以我将该Scrollbars属性设置为“无”。
我的行和列自动调整大小模式设置为 AllCells。
行和列标题不可见。如果是,则它们的大小必须包含在计算中。
下面的扩展方法符合我的需要。这很简单,因为我的网格非常简单。您可能需要对其进行一些调整才能使其按照您的意愿工作,并且需要进行大量调整才能使其适用于每个 DataGridView 场景。
public static void HandleAutoSize(this DataGridView dgv)
{
dgv.DataBindingComplete += (s, e) =>
{
var dg = (DataGridView)s;
var width = dg.Columns.GetColumnsWidth(DataGridViewElementStates.None);
var height = dg.Rows.GetRowsHeight(DataGridViewElementStates.None);
dg.ClientSize = new Size(width, height);
};
}
Run Code Online (Sandbox Code Playgroud)
如果要根据数据自动调整所有列的大小:
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
Run Code Online (Sandbox Code Playgroud)