我来自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>
答案 0 :(得分: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";
}
}
}
}
代码可能在语法上并不完美,但你可以从中得到一个想法。
答案 1 :(得分:0)
您可以使用网格视图的服务器端事件:
在这种情况下,您可以访问在行内创建的控件,并修改它们,如下所示:
if(e.Row.RowType == DataControlRowType.DataRow) // (1)
{
// modify the row here
}
(1)这会跳过页眉和页脚,因此代码仅针对&#34;常规&#34;行
在// modify the row here
中,您可以访问该行内的控件并进行修改。
您也可以使用GridView.RowDataBound Event,其中包含传递给该行的数据信息(与上一个示例类似)。
在这两种情况下,您都可以使用Row
,并且可以access all of its properties。您可能会使用这些属性:
Cells
:行的单元格(列)Controls
:行内的控件DataItem
:它允许您访问绑定到此路由的数据(您可以使用调试器来查看lloks如何进行必要的转换)该过程将查看DataItem
中的数据,并查找需要修改的控件(或单元格)。 (我坚持在调试器上使用断点来浏览属性的值......它们有点麻烦,特别是数据项。)