2011-09-17 3 views
1

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

<asp:GridView ID="gvFirst" runat="server" AutoGenerateColumns="false" 
     AllowPaging="true" 
     ondatabound="gvFirst_DataBound" > 
     <Columns> 
      <asp:BoundField DataField="ID" HeaderText="ProductID"/> 
      <asp:BoundField DataField="Name" HeaderText="ProductName" /> 
     </Columns> 
     <PagerTemplate> 
      <asp:Panel ID="pnlPager" runat="server"> 
      </asp:Panel> 
     </PagerTemplate> 
    </asp:GridView> 

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

protected void gvFirst_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Pager) 
     { 
      Panel pnPager = e.Row.FindControl("pnlPager") as Panel; 
      if (pnPager != null) 
      { 
       Button btnFirst = new Button(); 
       btnFirst.Text = "1"; 
       btnFirst.Click += new EventHandler(btnFirst_Click); 
       pnPager.Controls.Add(btnFirst); 
      } 
     } 
    } 

/Если я создаю кнопку здесь и связать событие щелчка, то это не срабатывает ... этот огнь события после того, как все строки связываются с grid..so это будет происходить только один раз. ./

protected void gvFirst_DataBound(object sender, EventArgs e) 
    { 
     GridViewRow gvRow = gvFirst.BottomPagerRow; 
     if (gvRow != null) 
     { 
      Panel pnPager = gvRow.FindControl("pnlPager") as Panel; 
      if (pnPager != null) 
      { 
       Button btnFirst = new Button(); 
       btnFirst.Text = "1"; 
       btnFirst.Click += new EventHandler(btnFirst_Click); 
       pnPager.Controls.Add(btnFirst); 
      } 
     } 
    } 

    void btnFirst_Click(object sender, EventArgs e) 
    { 
     using (_NorthWindDataContext = new NorthWindDataContext()) 
     { 
      var ProductInformation = from p in _NorthWindDataContext.Products 
            select new 
            { 
             ID = p.ProductID, 
             Name = p.ProductName 
            }; 
      gvFirst.DataSource = ProductInformation.Skip(5).Take(5); 
      gvFirst.DataBind(); 
     } 
    } 

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

Привет, спасибо!

переменной
public class Productinformation 
{ 
    public int PID 
    { 
     get; 
     set; 
    } 
    public string PName 
    { 
     get; 
     set; 
    } 
} 
using (NorthWindDataContext _NorthWindDataContext = new NorthWindDataContext()) 
     { 
      Proinfo = new List<Productinformation>(); 
      Proinfo = (from p in _NorthWindDataContext.Products 
         select new Productinformation 
         { 
          PID = p.ProductID, 
          PName = p.ProductName, 
         }).ToList(); 

      gvFirst.DataSource = Proinfo.Take(PageSize) ; 
      gvFirst.DataBind(); 
     } 

PROINFO объявить globaly ... Теперь Когда я связать я запускаю этот код он даст мне ошибку источник данных не поддерживает серверный пейджинг данных, если я использую тип уага переменных, то это но мы не можем объявить var тип переменной globaly, поэтому я использовал его, тогда я должен каждый раз называть этот метод в пейджинге ... и я не хочу использовать Objectdatasource Помогите мне ....

ответ

1
  1. GridView's RowCreated действительно будет называться для каждого строка в GridView, потому что это событие, когда GridView (re) создает GridViewRows. Но если вы проверите if (e.Row.RowType == DataControlRowType.Pager), накладных расходов не будет. Это событие идеально подходит для создания динамических элементов управления, поскольку оно называется даже при обратной передаче (в отличие от RowDataBound). Поэтому ваш первый путь должен быть правильным.
  2. Если вы хотите показать пейджер также, когда строки меньше, чем страницы, вы должны заставить пейджер быть visible, например. в переопределенном GridView OnPreRender.

    GridViewRow pagerRow = (GridViewRow) this.BottomPagerRow;
    если (pagerRow! = Null) pagerRow.Visible = true;

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