Доступ к другой строке в Gridview RowDataBound?

Есть ли способ получить доступ к элементам, которые находятся в другой строке, когда вы находитесь в событии RowDataBound?

public void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // how to compare e.Row with row above or row below?
}

person Pupper    schedule 30.11.2011    source источник


Ответы (2)


Одна вещь, я думаю, вы можете сделать, это...

foreach (GridViewRow gvrow in GridView1)
{
    //loop through gridview's rows and find the row you're looking for
}

Я считаю, что RowDataBound добавляет строки в том же порядке, в котором они находятся в источнике данных, поэтому, если в вашем DataTable есть 100 записей, и вы привязываете этот DataTable к GridView, RowDataBound вызывается 100 раз для каждой строки в порядке они существуют в DataTable. Поэтому вы упомянули об использовании RowDataBound для сравнения e.Row со строкой выше ИЛИ строкой ниже... но если они поступают последовательно, строки ниже нет. Это то, о чем я раньше не задумывался, но при тестировании с точками останова я вспомнил, что RowDataBound работает таким образом.

Если вы не можете заставить что-то подобное работать, и вам нужно, чтобы это произошло, даже если это некрасиво и вы не получите лучших ответов, вы можете сохранить копию вашей DataTable с привязкой к данным или любого другого источника данных в переменная ViewState или Session, например ViewState["myDataTable"]. Затем вы можете получить DataTable по событию RowDataBound и просмотреть строки выше и ниже строки, представленной e.Row (при условии, что у вас есть какой-то курсор, например идентификатор, для идентификации строк). Делая это, вы МОЖЕТЕ просмотреть следующую строку, которая будет добавлена ​​в GridView с помощью RowDataBound, потому что это будет следующая строка в DataTable (которая уже существует и может быть просмотрена).

Однако, если вы делаете что-то в массовом масштабе, я думаю, что все эти циклы могут стать громоздкими.

person CptSupermrkt    schedule 30.11.2011
comment
Привет CptSupermrkt, большое спасибо за совет. Я сделал то, что вы предложили, - просто прокрутите gridview после привязки данных вместо того, чтобы пытаться сделать это в RowDataBound. Он добавил несколько дополнительных строк кода, но работал хорошо. Спасибо еще раз :) - person Pupper; 30.11.2011

Из туманной памяти вы можете ссылаться на массив GridView Row оттуда и повторять их. Вы должны быть в состоянии получить позицию e и получить доступ в любом случае к строкам выше, не уверен насчет строк ниже, поскольку к тому времени они еще не привязаны к данным, я полагаю, если только это не повторная привязка одной строки.

person favoretti    schedule 30.11.2011
comment
Привет, Фаворетти, я закончил тем, что просто просмотрел gridview после привязки данных, вместо того, чтобы пытаться сделать это в ItemDataBound. Спасибо за совет :). - person Pupper; 30.11.2011