#c# #winforms #datagridview
#c# #winforms #datagridview
Вопрос:
В моей сетке в настоящее время 40 строк. Одновременно может отображаться только 20 строк, поэтому в сетке есть полоса прокрутки.
Я хочу заморозить последнюю строку DataGridView, но затем полоса прокрутки исчезает. Как это решить?
Комментарии:
1. Итак, вы хотите установить последнюю строку как замороженную, но это также приводит к нежелательному поведению, поэтому вы этого не хотите? Я что-то не понимаю?
2. последняя из 20 показанных или последняя из всех 40? Что вы подразумеваете под точным замораживанием, что оно должно быть включено = false? Что он должен всегда оставаться внизу? Можете ли вы показать, что вы пробовали? Можете ли вы показать скриншоты ожидаемого поведения?
3. @Default: для строк в DataGridView есть свойство «заморожено» .
4. смотрите, я написал код, поэтому каждый раз всегда отображается последняя строка. Теперь есть способ решить эту проблему?
Ответ №1:
Вы используете DataGridviewRow.Frozen
свойство: смотрите Документацию здесь .
Это свойство позволяет сохранять одну или несколько строк важной информации на месте, когда пользователь прокручивает DataGridView. Все строки над замороженной строкой также заморожены.
По сути, это означает, что если вы «заморозите» последнюю строку, все строки над замороженной строкой тоже будут заморожены; это означает, что полоса прокрутки удаляется, потому что вы замораживаете последнюю строку.
Чтобы ответить на ваш вопрос; вы не можете индивидуально «заморозить» только последнюю строку, это не в характере Frozen
собственности.
В этом документе задокументировано обходное решение. Однако это в VB, поэтому вам придется перевести это на C # самостоятельно.
На самом деле, посмотрев дальше, я нашел этот документ, в котором есть небольшой пример на C #. Похоже, в нем есть ошибки, но он может помочь вам достичь вашей цели.
public partial class MyDataGridView : DataGridView
{
public StatusStrip Footer
{
get { return (StatusStrip)this.Controls["Footer"]; }
}
private bool _footerVisible;
[Browsable(false)]
///
/// Sets or Gets the value specifying if a footer bar is shown or not
///
public bool FooterVisible
{
get { return _footerVisible; }
set
{
_footerVisible = value;
this.Controls["Footer"].Visible = _footerVisible;
}
}
public MyDataGridView()
{
InitializeComponent();
StatusStrip footer = new StatusStrip();
footer.Name = "Footer";
footer.ForeColor = Color.Black;
this.Controls.Add(footer);
((StatusStrip)this.Controls["Footer"]).Visible = _footerVisible;
((StatusStrip)this.Controls["Footer"]).VisibleChanged = new EventHandler(RDataGridView_VisibleChanged);
this.Scroll = new ScrollEventHandler(RDataGridView_Scroll);
_footerItems = ((StatusStrip)this.Controls["Footer"]).Items;
}
}
Приведенный выше код может использоваться как usercontrol и наследуется от DataGridView
. Затем он добавляет нижний колонтитул, который вы можете заполнить последней строкой по вашему выбору. Полоса прокрутки все равно будет видна, если вы установите Frozen
для свойства всех строк значение False.
Комментарии:
1. @Santarkantos: Вы правы, я отредактировал свой ответ. И попытка найти обходной путь, если он есть.