Vincent Maverick Durano
Ты получаешь null
потому что вы ссылаетесь на элемент управления изнутри EditItemTemplate
который может быть доступен только тогда, когда GridView
на Edit
режим. Вам нужно проверить наличие RowType
и RowState
перед получением доступа к любым элементам управления из GridView
около OnRowDataBound
событие. Вот пример того, как вы можете получить доступ к элементу управления из ItemTemplate
:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Label lblGroupBulletID = (Label)e.Row.FindControl("lblBulletGroupID");
//do something here
}
}
Как вы можете видеть доступ к элементу управления из
ItemTemplate
это довольно прямолинейно, так как мы будем проверять только
RowType
типа
DataRow
. Однако доступ к элементу управления из
EditItemTemplate
требуется дополнительная проверка. Вот вам пример:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
Label lblEditGroupBulletID = (Label)e.Row.FindControl("BulletGroupID");
//do something here
}
}
}
Сначала мы проверяем
RowType
чтобы убедиться, что мы манипулируем только строками типа
DataRow
Пожалуйста, обратите внимание, что
GridView
состоит из нескольких типов строк, таких как
Header
,
DataRow
,
EmptyDataRow
,
Footer
,
Pager
и
Separator
Следующая строка в блоке кода выше-это критическая часть кода, которая должна определить
Edit
государство.
Доступ к элементам управления из <edititemtemplate> немного сложен, особенно если вы действительно не знакомы с тем, как этот материал работает внутри
GridView
. Приравнивая
RowState
к
DataControlState.Edit
это не совсем точно, и при этом вы можете получить исключение. То
RowState
свойство-это побитовая комбинация. Таким образом,
RowState
может указывать на то, что вы находитесь в
Edit
государство и
Alternate
государство. Следовательно, вы не можете сделать простую проверку равенства, когда находитесь внутри
Edit
режим. Вместо этого вы должны сделать что-то вроде этого:
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
//access controls here
}
Мы используем побитовое “
&
” оператор, чтобы определить, если
GridView
в
Edit
режим и проверьте результат, если он больше нуля. Подробнее о Побитовом операторе см.:
Побитовые операторы в языке Си#[
^] .
Как только нам удастся определить
Edit
состояние, теперь вы можете начать доступ к элементам управления с помощью
FindControl()
метод, как это обычно делается при ссылке на элемент управления из элемента управления представлением данных, например
GridView
.
Надеюсь, это поможет!