2010-02-22 2 views
9

В одной из моих форм datagridview отображает данные из базы данных (конечно, количество данных (так количество строк) может измениться). Соединение с базой данных находится в событии загрузки формы. Я просто не могу понять, как высота всего datagridview авторизована, в зависимости от количества отображаемых строк.winforms: datagridview: height (autosize) в зависимости от количества строк

ответ

4

Если вы установите DataGridView.AutoSize == true, то при добавлении большего количества строк сетка будет больше. В противном случае вы получите полосы прокрутки. Если вы не установили ScrollBars == Null || Горизонтально, и в этом случае строки просто исчезают из конца.

По какой-то причине DataGridView.AutoSize может быть установлен программно. И есть некоторые странные поведения, наблюдаемые, когда вы кладете сетку внутри автоматического управления. Кажется, он не реагирует на размер сетки.

Я закончил вычислять ожидаемый размер сетки из столбца, строки, заголовка, поля, отступов и размеров границ, а затем определял размер элемента управления, содержащий сетку, и привязывал сетку с четырех сторон. Чувствовал себя действительно неуклюжим, но это лучшее, что я мог придумать. Если вы все еще рядом, прокомментируйте, и я посмотрю, смогу ли я найти код, у меня его нет.

9

Это то, что мне удалось найти, и он прекрасно работает до сих пор:

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 для его реализации.

+0

Это сработало для меня, но мне пришлось поставить круглые скобки вокруг верхнего выражения перед знаком +. Я считаю, что это «порядок операций» с оператором? /:. –

+0

Хорошая точка. Я добавил круглые скобки, чтобы устранить любые сомнения в отношении этого сложного приоритета оператора. – Larry

0

Вот как я это сделал. для установки высоты 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; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^