2017-06-12 62 views
0

当我试图在用户不是admin时从gridview中隐藏删除按钮时,出现以下错误。 “其他信息:对象引用不设置到对象的实例当我试图隐藏GridView上的删除按钮时出现错误

HTML

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ClinicalFollowUpID" 
    OnRowDataBound="OnRowDataBound" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit"        
    AllowPaging="True" OnPageIndexChanging="OnPaging" PageSize="5" 
OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting"> 
<Columns> 
    <asp:GridView ID="GridView1" runat="server AutoGenerateColumns="False" DataKeyNames="ClinicalFollowUpID" 
     OnRowDataBound="OnRowDataBound" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit" 
    OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting"> 
<Columns> 
    <asp:TemplateField HeaderText="ID" Visible="false"> 
    <ItemTemplate > 
    <asp:Label ID="lblClinicalFollowUpID" runat="server" Text='<%# Eval("ClinicalFollowUpID") %>' > 
    </asp:Label> 
    </ItemTemplate> 

</asp:TemplateField> 
     <asp:TemplateField HeaderText="MBID"> 
     <ItemTemplate > 
    <asp:Label ID="lblMBID" runat="server" Text='<%# Eval("MBID") %>' > 
     </asp:Label> 
      </ItemTemplate> 
      </asp:TemplateField> 
    </asp:TemplateField> 
    <asp:CommandField ButtonType="Link" ShowEditButton="true" ShowDeleteButton="true" ItemStyle-Width="150" HeaderText="Click to Edit"> 
     <ItemStyle Width="150px"></ItemStyle> 
     </asp:CommandField> 
     </Columns> 

C#代码

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     lbltype.Text = Session["Type"].ToString(); 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 

      if (lbltype.Text != "admin") 
      { 

       LinkButton lnkedit = (LinkButton)GridView1.FindControl("lnkedit"); 
       lnkedit.Visible = false; 
      } 
     } 
    } 
+0

请检查你的GridView的HTML,看看是否有一个名为“lnkedit”任何的LinkBut​​ton 。 – Prabhat

+0

[什么是NullReferenceException,我该如何解决它?]可能的重复(https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it ) – VDWWD

+0

为什么不添加一个ItemTemplate,所以你可以有更多的控制 [如何禁用控制在命令字段控制在网格视图](https://stackoverflow.com/questions/7187879/)如何禁用一个控制在命令字段控制在网格视图) –

回答

1

您将无法除非您关闭网格视图AutoGenerateEditButton属性财产后手动定义模板访问使用的FindControl链接按钮。

请尝试以下方法找到编辑链接按钮,隐藏它(假设最后一栏对应的命令字段):

if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    if (lbltype.Text != "admin") 
     { 
     LinkButton deleteLink = (LinkButton)e.Row.Cells[e.Row.Cells.Count - 1].Controls[2]; 
     if(deleteLink != null && deleteLink.CommandName.Equals("Delete")) 
      { 
       deleteLink.Visible = false; 
      } 
     } 
    } 
+0

嗨Ashin感谢您的帮助代码工作,而不是隐藏删除按钮它隐藏编辑按钮任何帮助如何解决问题。谢谢 –

+0

更新了答案..只好得到控制数组中的第二项 – ashin

+0

对不起,我已经更新了答案再次..你需要使用下面的代码:LinkBut​​ton deleteLink =(LinkBut​​ton)e.Row.Cells [ e.Row.Cells.Count - 1] .Controls [2]; deleteLink.Visible = false; – ashin

0

试试这个

 Button btnEdit = (Button)e.Row.FindControl("Link"); 
     btnEdit.Visible = false; 

 if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
     var editBtn= e.Row.Cells[3].Controls[2] as Button; 
     editBtn.Visible = false; 

     } 
相关问题