我有一个GridView:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" GridLines="None"
                HorizontalAlign="Left" AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1" onrowcommand="GridView1_RowCommand1">
                <HeaderStyle HorizontalAlign="Left" />
                <Columns>
                   <asp:TemplateField HeaderStyle-Width="150">
                        <HeaderTemplate>
                            <b>Downloads</b>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <!-- <asp:HyperLink ID="hyperlinkDownload" runat="server" NavigateUrl="" >Download
                            MP3</asp:HyperLink> -->
                            <asp:LinkButton CommandName="download"
                             CommandArgument='<%# Eval("Name") %>' runat="server">Download MP3</asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>

</asp:GridView>


我想查询数据库中特定字段的值,如果为true,则显示LinkBut​​ton。如果为false,我不希望显示linkBut​​ton。

有没有办法以编程方式访问GridView并使其某些列可见或操纵其项目?

救命。

最佳答案

您可以通过向RowDataBound事件添加处理程序来实现。在下面的代码中添加以下内容的事件处理程序:

protected void myGrid_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    var data = e.Row.DataItem as DataRowView;
    if (data != null)
    {
        var lbtDownload = e.Row.FindControl("lbtDownload");
        lbtDownload.Visible = (bool) data.Row["HasFileForDownload"];
    }
}


在您的标记中,将事件处理程序附加到网格:

<asp:GridView OnRowDataBound="myGrid_RowDataBound" ...>


您还需要为id分配LinkButton,以与在事件处理程序中使用FindControl()方法搜索的内容匹配。

免责声明:我目前在Linux机器上,没有机会进行测试。请报告代码中的所有错误-如果您具有编辑权限,请随时对其进行纠正。

关于c# - 以编程方式访问GridView列并进行操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2272015/

10-17 00:13