2010-01-31 3 views
0

У меня есть очень простой GridView на одном из моих страниц со следующей разметкой на моей странице .aspx:GridView Paging Выпуск

<asp:GridView ID="gvNews" runat="server" AutoGenerateColumns="false" AllowPaging="true" 
      AllowSorting="true" DataKeyNames="NewsID,VersionStamp" OnPageIndexChanging="gvNews_PageIndexChanging" 
      OnRowCreated="gvNews_RowCreated"> 
      <Columns> 
       <asp:BoundField HeaderText="News Title" DataField="NewsTitle" 
        SortExpression="NewsTitle" ReadOnly="true" /> 
       <asp:BoundField HeaderText="News Content" DataField="NewsContent" 
        SortExpression="NewsContent" ReadOnly="true" /> 
       <asp:BoundField HeaderText="Posted Date" DataField="InsertedDate" 
        SortExpression="InsertedDate" ReadOnly="True" /> 
       <asp:BoundField HeaderText="InsertedBy" DataField="InsertedBy" /> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:LinkButton ID="lbEdit" runat="server" Text="Edit" CommandName="Select" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

Ниже приведен код на моей странице .cs:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       LoadGrid(); 
      } 
     } 

     private void LoadGrid() 
     { 
      gvNews.DataSource = GetNews(); 
      gvNews.DataBind(); 
     } 


     protected void gvNews_PageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 

     } 

     protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e) 
     { 
      e.Row.Cells[3].Visible = false; 
     } 

В событии RowCreated я пытаюсь скрыть столбец InsertedBy в gridview. Этот код отлично работает, когда параметр AllowPaging установлен на flase. Но когда для параметра AllowPage установлено значение true, я получаю следующую ошибку в обработчике событий RowCreated:

Указанный аргумент был вне допустимых значений. Наименование параметра: индекс

В чем могут быть причины этого поведения?

ответ

0

Вы должны написать код так:

protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Cells[3].Visible = false; 
    } 
} 

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

+0

Спасибо, что сработало отлично. Нам также необходимо проверить строку заголовка так, чтобы и заголовок, и datarows были невидимыми: if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header) { e.Row.Cells [3] .Visible = false; } – Kumar

0

Из того, что вы опубликовали, ваше жесткое кодированное значение 3 в событии RowCreated похоже на проблему. Включите трассировку на странице и посмотрите, что вы получаете. Кстати, пейджер next-> prev ссылки также вызывают обратную связь, а в PageLoad u загружаются только сетки, если это не обратная передача, которая есть, когда вы пытаетесь перейти на следующую страницу и созданная строка уволена.