Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据列值动态更改gridview链接按钮的文本_C#_Asp.net - Fatal编程技术网

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

C# 根据列值动态更改gridview链接按钮的文本,c#,asp.net,C#,Asp.net,我来自PHP背景。对于从数据库填充的GridView,我有以下代码。我想根据网格中状态列的值更改链接按钮的文本。例如,如果状态列的值为“待定”,则链接按钮应显示文本编辑详细信息,而不是查看详细信息。我该怎么做 <asp:GridView ID="empres1" runat="server" AllowPaging="True" AutoGenerateColumns="False" onrowcommand="empres1_RowCommand"

我来自PHP背景。对于从数据库填充的GridView,我有以下代码。我想根据网格中状态列的值更改链接按钮的文本。例如,如果状态列的值为“待定”,则链接按钮应显示文本
编辑详细信息
,而不是
查看详细信息
。我该怎么做

<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>

查看详细信息
-------------------^

您可以使用网格视图的服务器端事件:

在这种情况下,您可以访问在行内创建的控件,并对其进行修改,如下所示:

if(e.Row.RowType == DataControlRowType.DataRow)  // (1)
{
  // modify the row here
}
(1) 这将跳过页眉和页脚,因此代码仅对“常规”行运行

//此处修改行
中,您可以访问行内的控件,并对其进行修改

您也可以使用,它具有传递到行的数据信息(以与上一个示例类似的方式)

在这两种情况下,您都有可用的
,并且您可以。您可能会使用以下属性:

  • 单元格
    :行的单元格(列)
  • 控件
    :行内的控件
  • DataItem
    :它允许您访问绑定到此路由的数据(您可以使用调试器查看它如何进行必要的强制转换)

过程是查看
DataItem
中的数据,并查找需要修改的控件(或单元格)。(我坚持在调试器上使用断点来浏览属性值……它们有点麻烦,尤其是数据项)。

您需要使用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";
            }
        }

    }
}
代码在语法上可能并不完美,但是您可以从中得到一个想法