Вложенный репитер в Gridview: скрытие строки сетки и заголовка репитера, если в репитере нет данных - PullRequest
1 голос
/ 21 апреля 2010

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

Спасибо, Этот случай я обработал на уровне кода, отфильтровав полученную таблицу данных.

Теперь другая проблема, с которой я сталкиваюсь: Я разрешил пейджинг на gridview, т.е. на странице 3. Когда страница загружается, она работает нормально, но когда я перехожу на страницу 2, она генерирует следующую ошибку: Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

Ниже приведен код для заполнения сетки, разбивки на страницы и повторителя заполнения для события сетки, связанного со строкой.

приватная пустота FillGrid () { clsCustomFunctions objShort = new clsCustomFunctions (); grd1.DataSource = objShort.GetAll ();
} * +1010 *

protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    try
    {
        FillGrid();
        grd1.PageIndex = e.NewPageIndex;
        grd1.DataBind();
    }
    catch (Exception ex)
    {
        lblMsg.Text = ex.Message;
    }
}

protected void grd1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    clsCustomFunctions objShort = new clsCustomFunctions();        
    if (e.Row.RowType == DataControlRowType.DataRow)
    {            
        ((HtmlTable)e.Row.FindControl("gridTable")).BgColor = "#006699";
        Repeater rpt = (Repeater)e.Row.FindControl("rpt1");
        rpt.DataSource = objShort.GetResult(Convert.ToInt32(grd1.DataKeys[e.Row.DataItemIndex].Value));
        rpt.DataBind();
    }
}

grd1.DataKeys [e.Row.DataItemIndex]. Строка значения вызывает ошибку. Как справиться с этим, чтобы передать значения только на странице 2.

1 Ответ

1 голос
/ 21 апреля 2010

Попробуйте обработать событие OnRowDataBound сетки. Это дает вам объект GridViewRowEventArgs (скажем, e).

Затем вы можете просмотреть e.Row.DataItem, чтобы получить данные, к которым он привязан, чтобы проверить, нужно ли скрывать заголовок.

Вы можете использовать e.Row.FindControl ("RepeaterName"), чтобы заставить ретранслятор манипулировать, как вы хотите.

...