以编程方式访问GridView列并进行操作

时间:2010-02-16 10:10:56

标签: c# .net asp.net

我有一个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>

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

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

帮助。

2 个答案:

答案 0 :(得分:2)

您可以通过向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机器,没有机会对此进行测试。请报告代码中的任何错误 - 如果您拥有编辑权限,请随时更正错误。

答案 1 :(得分:2)

是的。

1)您需要订阅RowDataBound事件 2)给LinkBut​​ton一个ID 3)插入代码隐藏

  protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
  {
    if(e.Row.RowType == DataControlRowType.DataRow)
    { 
      LinkButton _bt = e.Row.FindControl("ID") as LinkButton;
      if(_bt != null)
      {
        // have a look at the e.row.DataItem and try to get the value of your desired visibility property
        _bt.Visible = true;
      }
    }
  }

4)如果这对访问DataItem不起作用,请开始考虑LinqDataSource。