GridView Paging Issue - PullRequest
       13

GridView Paging Issue

0 голосов
/ 31 января 2010

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

<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 в виде сетки. Этот код отлично работает, когда AllowPaging установлен на flase. Но когда для параметра AllowPaging установлено значение true, я получаю следующую ошибку в обработчике событий RowCreated:

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

Какие могут быть причины такого поведения?

Ответы [ 2 ]

0 голосов
/ 31 января 2010

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

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

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

0 голосов
/ 31 января 2010

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

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