Окна C # образуют 2 вида сетки с синхронизированной прокруткой - PullRequest
3 голосов
/ 07 марта 2011

Я разрабатываю приложение, в котором заполняются два представления данных из разных источников данных.Я хотел бы иметь одну вертикальную полосу прокрутки, которая заставит оба вида сетки работать одновременно (прокрутка вверх и вниз)

Может кто-нибудь сказать мне, как или направить меня к хорошему учебнику.

Ответы [ 7 ]

7 голосов
/ 27 октября 2011

Если у вас есть dgv1 и dgv2, вы можете создать что-то вроде

dgv1.Scroll += new System.Windows.Forms.ScrollEventHandler(dgv1_Scroll);

Затем в методе dgv1_Scroll вы можете использовать свойство FirstDisplayedScrollingRowIndex:

dgv2.FirstDisplayedScrollingRowIndex = dgv1.FirstDisplayedScrollingRowIndex

Конечно, если dgvколичество строк различно, вам нужно избегать исключения IndexOutOfRange, проверяя количество строк в dgv.

1 голос
/ 06 марта 2016

Используйте HorizontalScrollingOffset (или VerticalScrollingOffset).

this.dataGridViewDataSample.HorizontalScrollingOffset
1 голос
/ 07 марта 2011

http://www.xs4all.nl/~wrb/Articles_2010/Article_DataGridViewScroll_01.htm

Эта ссылка показывает именно то, что мне было нужно и отлично работало для меня. Единственная проблема, с которой я столкнулся сейчас, заключается в том, что в сетках данных нет одинаковых строк. Поэтому, даже когда один заканчивает (больше не нужно прокручивать), другой должен продолжать.

Есть предложения?

1 голос
/ 07 марта 2011

Вы можете поместить DataGridViews в Panels и использовать это:

public Form1()
{
    InitializeComponent();
    panel1.Scroll += new ScrollEventHandler(panel1_Scroll);
}

void panel1_Scroll(object sender, ScrollEventArgs e)
{
    panel2.AutoScrollPosition = new Point(0,e.NewValue);
}

К сожалению, не похоже, что DataGridView обладает этим свойством.

1 голос
/ 07 марта 2011

Я полагаю, что вы можете настроить сценарий, подобный событию, когда всякий раз, когда изменяется «значение» полосы прокрутки A, также следует изменять полосу прокрутки B на соответствующее значение.

(Обратите внимание, что значение является свойством прокруткиbar, я не имею в виду значение данных внутри контейнера.)

Пожалуйста, ознакомьтесь со следующей статьей msdn, касающейся этого свойства полосы прокрутки:

http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollbar.value.aspx

А сам класс - http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollbar.aspx

0 голосов
/ 31 июля 2015
_dataGridViewInput.Scroll += new ScrollEventHandler(_dataGridViewInput_Scroll);
_dataGridViewOutput.Scroll += new ScrollEventHandler(_dataGridViewOutput_Scroll);

void _dataGridViewInput_Scroll(object sender, ScrollEventArgs e)
{
    this._dataGridViewOutput.FirstDisplayedScrollingRowIndex = this._dataGridViewInput.FirstDisplayedScrollingRowIndex;
}

void _dataGridViewOutput_Scroll(object sender, ScrollEventArgs e)
{
    this._dataGridViewInput.FirstDisplayedScrollingRowIndex = this._dataGridViewOutput.FirstDisplayedScrollingRowIndex;
}
0 голосов
/ 07 февраля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...