2016-05-06 2 views
1

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

< ----------------------------------- Мой код -------- ----------------------------->

Методы, чтобы заполнить DataGridView:

public void TabelaFuncionario() 
{ 
    try 
    { 
     BDfuncionarios = new DataTable(); 
     string cmd = "My select string"; 
     var adpt = fConexao.GetDataAdapter(cmd); 
     BDfuncionarios.Clear(); 
     adpt.Fill(BDfuncionarios); 
    } 
    catch (Exception r) 
    { 
     MessageBox.Show(r.Message); 
    } 
} 

public void BotaoFuncionario() 
{ 
    try 
    { 
     TabelaFuncionario(); 
     PosXartigo = 1; 
     PosYartigo = 1; 

     //Apagar o painel todo 
     dataGridView1.Controls.Clear(); 
     foreach (DataRow row in BDfuncionarios.Rows) 
     { 
      int posicaoX = ((PosXartigo - 1) * Gap_Xartigo) + xInicial + (Largura_BotaoArtigo * (PosXartigo - 1)); 
      if (posicaoX > maximoxArtigo) 
      { 
       PosYartigo++; PosXartigo = 1; 
      } 
      else 
      { 
       PosXartigo = PosXartigo != 1 ? PosXartigo++ : 1; 
      } 
      int PontoX = ((PosXartigo - 1) * Gap_Xartigo) + xInicial + (Largura_BotaoArtigo * (PosXartigo - 1)); 
      int PontoY = ((PosYartigo - 1) * Gap_Yartigo) + yInicial + (Altura_BotaoArtigo * (PosYartigo - 1)); 
      Button bt1 = new Button(); 
      bt1.Location = new Point(PontoX, PontoY); 
      Mo mo = new Mo(); 
      mo.codmo = (int)row["Something"]; 
      mo.nome_func = (string)row["Something"]; 
      bt1.Name = "Botao" + NBotoes.ToString(); 
      bt1.Height = Altura_BotaoArtigo; 
      bt1.Width = Largura_BotaoArtigo; 
      bt1.BackColor = Color.Tan; 
      bt1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold); 
      bt1.ForeColor = Color.Black; 
      bt1.Text = mo.nome_func; 
      bt1.Tag = mo; 
      bt1.FlatStyle = FlatStyle.Popup; 
      bt1.Click += btArtigo_click; 
      dataGridView1.Controls.Add(bt1); 

      NBotoes++; 
      PosXartigo++; 
     } 
    } 
    catch (Exception r) 
    { 
     MessageBox.Show(r.Message); 
    } 
} 

изображение мой форма (не знаю, если это помогает):

http://imgur.com/f5G25nX

< -------------------------- EDITED-- ------------------------ ------->

я пытался что-то вроде этого: https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowcount(v=vs.110).aspx

дает мне из диапазона или что-то вроде этого

И попытался это только сейчас

int row = dataGridView1.RowCount; 
MessageBox.Show(row+""); 

И он отображает меня 0; как у меня есть кнопки внутри моей сетки, но есть 0 строк?

+0

http://stackoverflow.com/questions/19648872/datagridview-how-to-jump-to-the-selected-row-in-search аналогичный вопрос - включение прокрутки в определенные строки – Squiggle

+0

_all дает мне ошибку. Какие ошибки вы получаете и что вы пробовали? –

+0

@NullException я отредактировал вопрос –

ответ

0

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

Методы:

public void TabelaFuncionario() 
    { 

     try 
     { 
      BDfuncionarios = new DataTable(); 
      string cmd = "your select"; 
      var adpt = fConexao.GetDataAdapter(cmd); 
      BDfuncionarios.Clear(); 
      adpt.Fill(BDfuncionarios); 
     } 
     catch (Exception r) 
     { 

      MessageBox.Show(r.Message); 
     } 
    } 

    public void BotaoFuncionario() 
    { 
     try 
     { 

      TabelaFuncionario(); 
      PosXartigo = 1; 
      PosYartigo = 1; 

      //Apagar o painel todo 
      panel2.Controls.Clear(); 
      foreach (DataRow row in BDfuncionarios.Rows) 
      { 
       int posicaoX = ((PosXartigo - 1) * Gap_Xartigo) + xInicial + (Largura_BotaoArtigo * (PosXartigo - 1)); 
       if (posicaoX > maximoxArtigo) 
       { 
        PosYartigo++; PosXartigo = 1; 
       } 
       else 
       { 
        PosXartigo = PosXartigo != 1 ? PosXartigo++ : 1; 
       } 
       int PontoX = ((PosXartigo - 1) * Gap_Xartigo) + xInicial + (Largura_BotaoArtigo * (PosXartigo - 1)); 
       int PontoY = ((PosYartigo - 1) * Gap_Yartigo) + yInicial + (Altura_BotaoArtigo * (PosYartigo - 1)); 
       Button bt1 = new Button(); 
       bt1.Location = new Point(PontoX, PontoY); 
       Mo mo = new Mo(); 
       mo.codmo = (int)row["Var1"]; 
       mo.nome_func = (string)row["Var2"]; 

       bt1.Name = "Botao" + NBotoes.ToString(); 
       bt1.Height = Altura_BotaoArtigo; 
       bt1.Width = Largura_BotaoArtigo; 
       bt1.BackColor = Color.Tan; 
       bt1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold); 
       bt1.ForeColor = Color.Black; 
       bt1.Text = mo.nome_func; 
       bt1.Tag = mo; 
       bt1.FlatStyle = FlatStyle.Popup; 
       bt1.Click += btFuncionario_click; 
       panel2.Controls.Add(bt1); 

       NBotoes++; 
       PosXartigo++; 

      } 
     } 
     catch (Exception r) 
     { 

      MessageBox.Show(r.Message); 

     } 
    } 

Теперь класс PainelExtension:

public static class PanelExtension 
{ 
    public static void ScrollDown(this Panel p, int pos) 
    { 
     //pos passed in should be positive 
     using (Control c = new Control() { Parent = p, Height = 1, Top = p.ClientSize.Height + pos }) 
     { 
      p.ScrollControlIntoView(c); 
     } 
    } 
    public static void ScrollUp(this Panel p, int pos) 
    { 
     //pos passed in should be negative 
     using (Control c = new Control() { Parent = p, Height = 1, Top = pos }) 
     { 
      p.ScrollControlIntoView(c); 
     } 
    } 
} 

Кнопки «вверх» и «вниз»:

private void upbt_Click(object sender, EventArgs e) 
    { 
     if (i >= 0) i = -1; 
     panel2.ScrollUp(i=i-30); 
    } 

    private void downbt_Click(object sender, EventArgs e) 
    { 
     if (i < 0) i = 0; 
     panel2.ScrollDown(i=i+20); 
    } 

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

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