根据列值动态更改gridview的链接按钮的文本

时间:2014-06-26 11:30:46

标签: 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>

2 个答案:

答案 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中的数据,并查找需要修改的控件(或单元格)。 (我坚持在调试器上使用断点来浏览属性的值......它们有点麻烦,特别是数据项。)