В одной из моих форм datagridview отображает данные из базы данных (конечно, количество данных (так количество строк) может измениться). Соединение с базой данных находится в событии загрузки формы. Я просто не могу понять, как высота всего datagridview авторизована, в зависимости от количества отображаемых строк.winforms: datagridview: height (autosize) в зависимости от количества строк
ответ
Если вы установите DataGridView.AutoSize == true, то при добавлении большего количества строк сетка будет больше. В противном случае вы получите полосы прокрутки. Если вы не установили ScrollBars == Null || Горизонтально, и в этом случае строки просто исчезают из конца.
По какой-то причине DataGridView.AutoSize может быть установлен программно. И есть некоторые странные поведения, наблюдаемые, когда вы кладете сетку внутри автоматического управления. Кажется, он не реагирует на размер сетки.
Я закончил вычислять ожидаемый размер сетки из столбца, строки, заголовка, поля, отступов и размеров границ, а затем определял размер элемента управления, содержащий сетку, и привязывал сетку с четырех сторон. Чувствовал себя действительно неуклюжим, но это лучшее, что я мог придумать. Если вы все еще рядом, прокомментируйте, и я посмотрю, смогу ли я найти код, у меня его нет.
MSDN говорит: «Это свойство не относится к данному классу».
Это то, что мне удалось найти, и он прекрасно работает до сих пор:
int GetDataGridViewHeight(DataGridView dataGridView)
{
var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) +
dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height);
return sum;
}
Благодаря этому, я инкапсулированные мой DataGridView в UserControl, так что я мог правильно реализовать AutoSize:
// This is in a user control where the datagrid is inside (Top docked)
protected override void OnResize(EventArgs e)
{
if (AutoSize)
{
var height = this.GetDataGridViewHeight(this.dataBoxGridView);
this.dataBoxGridView.Height = height;
this.Height = height +this.Padding.Top + this.Padding.Bottom;
}
}
Я не пытался (пока) создать пользовательский контроль непосредственно из DataGridView для его реализации.
Вот как я это сделал. для установки высоты DataGridView вы можете использовать свойство Set Height. На загрузке формы вы можете использовать этот код, чтобы скрыть datagridview. dataGridViewName.Height = 0;
Тогда При выборе строк из базы данных. мы можем использовать метод ниже, чтобы получить datagridview Height в соответствии с количеством строк.
private int dataGridViewHeight()
{
int sum = this.dataGridViewName.ColumnHeadersHeight;
foreach (DataGridViewRow row in this.dataGridViewName.Rows)
sum += row.Height + 1; // I dont think the height property includes the cell border size, so + 1
return sum;
}
Это сработало для меня, но мне пришлось поставить круглые скобки вокруг верхнего выражения перед знаком +. Я считаю, что это «порядок операций» с оператором? /:. –
Хорошая точка. Я добавил круглые скобки, чтобы устранить любые сомнения в отношении этого сложного приоритета оператора. – Larry