#c# #asp.net
#c# #asp.net
Вопрос:
Я из PHP. У меня есть следующий код для GridView, который заполняется из базы данных. Я хочу изменить текст кнопки ссылки на основе значения столбца состояния в сетке. Например, если значение столбца состояния равно «ожидание», то кнопка ссылки должна отображать текст Edit Details
вместо View Details
. Как мне это сделать?
<asp:GridView ID="empres1"
runat="server"
AllowPaging="True"
AutoGenerateColumns="False"
onrowcommand="empres1_RowCommand"
onrowediting="empres1_RowEditing"
onselectedindexchanged="empres1_SelectedIndexChanged1">
<asp:BoundField DataField="Status" HeaderText="Status" />
<asp:BoundField DataField="comments" HeaderText="comments" />
<asp:TemplateField HeaderText="" SortExpression="">
<ItemTemplate>
<asp:LinkButton ID="LinkButtonEdit" runat="server"
CommandName="ShowPopup"
CommandArgument='<%#Eval("EmployeeId") %>'>View Details
</asp:LinkButton>
-------------------^
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Ответ №1:
Для динамической установки текста необходимо использовать событие RowDataBound. Получите ссылку на linkbutton и задайте ее текст на основе элемента данных. Итак, ваш код должен выглядеть следующим образом.
protected void empres1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton button =
e.Row.Cells[2].FindControl("LinkButtonEdit");
if (button != null)
{
DataRow dr = e.Row.DataItem;
if (dr["status"].ToString() == "Pending")
{
button.Text = "Edit Details";
}
else
{
button.Text = "View Details";
}
}
}
}
Код может быть синтаксически несовершенным, но вы могли бы получить представление об этом.
Ответ №2:
Вы можете использовать событие на стороне сервера для представления сетки:
В этом случае вы можете получить доступ к элементам управления, созданным внутри строки, и изменить их следующим образом:
if(e.Row.RowType == DataControlRowType.DataRow) // (1)
{
// modify the row here
}
(1) при этом пропускаются верхние и нижние колонтитулы, так что код выполняется только для «обычных» строк
В // modify the row here
вы можете получить доступ к элементам управления внутри строки и изменить их.
В качестве альтернативы можно использовать GridView.Событие RowDataBound, содержащее информацию о данных, переданных в строку (аналогично предыдущему образцу).
В обоих случаях у вас есть Row
доступный, и вы можете получить доступ ко всем его свойствам. Вероятно, вы будете использовать эти свойства:
Cells
: ячейки (столбцы) строкиControls
: элементы управления внутри строкиDataItem
: это позволяет вам получить доступ к данным, привязанным к этому маршруту (вы можете использовать отладчик, чтобы посмотреть, как он может выполнить необходимое приведение)
Процесс будет заключаться в просмотре данных в DataItem
, и поиске элемента управления (или ячейки), который вам нужно изменить. (Я настаиваю на использовании точки останова в отладчике для просмотра значений свойств… они немного громоздкие, особенно элемент данных).