события вертикальной полосы прокрутки, не возникающие при просмотре таблицы данных - PullRequest
0 голосов
/ 16 октября 2011

У меня есть такой вид таблицы данных .... на изображении ниже это хорошо работает ...

Мне нужно подключить событие в вертикальной боковой панели ..

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

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

 using System.Reflection;
 using System.Windows.Forms;

bool addScrollListener(DataGridView dgv)
{
   bool ret = false;

   Type t = dgv.GetType();
    PropertyInfo pi = t.GetProperty("VerticalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic);
    ScrollBar s = null;

   if (pi != null)
    s = pi.GetValue(dgv, null) as ScrollBar;

   if (s != null)
  {
    s.Scroll += new ScrollEventHandler(s_Scroll);
    ret = true;
  }
  return ret;
}

private void s_Scroll(object sender, ScrollEventArgs e)
{
    if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
    {
        if (e.Type == ScrollEventType.ThumbPosition)
        {
            if (e.Type == ScrollEventType.SmallIncrement)
            {

                int i = dgvMembers.FirstDisplayedScrollingRowIndex;
                int idemebers =Convert.ToInt32(dgvMembers.Rows[i].Cells["Id"].Value.ToString());
                getMemberInfo(i, idemebers); // i want to the details of selected record into text boxes 

            }
            if (e.Type == ScrollEventType.SmallDecrement)
            {

                int i = dgvMembers.FirstDisplayedScrollingRowIndex;
                int idemebers = Convert.ToInt32(dgvMembers.Rows[i].Cells["Id"].Value.ToString());
                getMemberInfo(i, idemebers);

            }
        }

    }   
} 

но это событие не вызывается

s.Scroll += new ScrollEventHandler(s_Scroll);

оно не входит в это событие ...

любой кто-нибудь из PLS поможет в этом...

Большое спасибо заранее

1 Ответ

2 голосов
/ 16 октября 2011

Попробуйте использовать событие DataGridView.Scroll .

Чтобы быть более точным, я хочу получить идентификатор первого верхнего идентификатора записи, когда я нажимаю на верхнюю стрелку в вертикальной полосе прокрутки

В обработчике событий DataGridView.Scroll вы можете сделать это (верхняя стрелка считается небольшим уменьшением:

if (e.ScrollOrientation == ScrollOrientation.VerticalScroll
    && e.Type == ScrollEventType.SmallDecrement)
{
    int i = dgvMembers.FirstDisplayedScrollingRowIndex;
    // your code to process the first displayed row here
}
...