使LinkBut​​ton仅在GridView中的某些行中可见的问题

时间:2011-07-19 10:42:40

标签: asp.net vb.net visual-studio-2008 templates gridview

我已经设置了一个GridView,如下所示。你可以看到每行有四个LinkBut​​ton。我想要做的是根据它们出现在哪一行使某些LinkBut​​ton可用。

<asp:GridView ID="FormsGrid" runat="server" Width="657px" Height="250px" DataKeyNames="FORM_NAME,FORM_ACCESS,STATUS,ID"
               AutoGenerateColumns="False" DataSourceID="SqlDataSource1" >
             <Columns>
                 <asp:BoundField DataField="DEADLINE_DATE" HeaderText="Date" DataFormatString="{0:d}"
                     SortExpression="DEADLINE_DATE" />
                 <asp:BoundField DataField="FORM_NAME" HeaderText="Event" 
                     SortExpression="FORM_NAME" >                     
                     <ItemStyle Width="240px" />
                 </asp:BoundField>
                 <asp:BoundField DataField="COMPULSORY" HeaderText="Compulsory?" 
                     SortExpression="COMPULSORY" />
                 <asp:BoundField DataField="FORM_NO" HeaderText="Form" 
                     SortExpression="FORM_NO" />     
                 <asp:TemplateField HeaderText="Access">
                     <ItemTemplate>
                         <asp:LinkButton ID="FormLinkBtn" runat="server"  
                             onclick="FormLinkBtn_Click">Form Link</asp:LinkButton>
                         <br />
                         <asp:LinkButton ID="NotReqBtn" runat="server"  
                             onclick="NotReqBtn_Click">Not Required</asp:LinkButton>
                         <br />
                         <asp:LinkButton ID="DnLoadBtn" runat="server"  
                             onclick="DnLoadBtn_Click">Download Pdf</asp:LinkButton>
                         <br />
                         <asp:LinkButton ID="UploadBtn" runat="server"  
                             onclick="UploadBtn_Click">Upload Pdf</asp:LinkButton>                             
                     </ItemTemplate>
                 </asp:TemplateField>
                 <asp:BoundField DataField="STATUS" HeaderText="Completed?" 
                     SortExpression="STATUS" />
                 <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" Visible="False" />
             </Columns>
         </asp:GridView>

当我尝试使它们不可见时,请使用FormsGrid_RowDataBound中的以下代码,它不起作用并获得空值错误。

if e.Row.Cells(4).Text = "1" then
   Dim FLbtn As LinkButton = FormsGrid.FindControl("FormLinkBtn")
   FLbtn.Visible = True
   Dim NRbtn As LinkButton = FormsGrid.FindControl("NotReqBtn")
   NRbtn.Visible = False
   Dim DLbtn As LinkButton = FormsGrid.FindControl("DnLoadBtn")
   DLbtn.Visible = False
   Dim ULbtn As LinkButton = FormsGrid.FindControl("UploadBtn")
   ULbtn.Visible = False
end if

当我点击说FormLinkBtn时,如何确定该特定行中字段的值?

1 个答案:

答案 0 :(得分:0)

建议#1:

将“if”语句包装在检查行类型的“if”中: if(e.Row.RowType == DataControlRowType.DataRow) { ...... //你的代码在这里 } 您获得空值异常,因为首先您点击标题行。行的类型很少。 在这种情况下,您只对DataRow感兴趣。

问题第2部分:

如果只使用链接按钮并单击事件,则需要在linkBut​​ton的CommandArgument或CommandName属性中传递一些数据。您可以使用CommandField或ButtonField来避免处理标识CommandArgument或CommandName中的行的数据。