2014-05-19 2 views
0

내 프로젝트에 격자보기가 있습니다. 프로젝트가 관리자로 로그인하면 편집하고 볼 수있는 권한이 있습니다. 하지만 내가 사용자로 로그인 할 때 편집 옵션을 비활성화하려고합니다. 템플릿 필드 내부의 링크 버튼 인 편집 옵션을 비활성화하려고하는데 오류가 발생합니다. 다음은 rowdatabound 이벤트 내에서 컨트롤을 가져 오지 못합니다.

내 코드는 지금까지 시도이다

protected void gvDocuments_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      string username = Convert.ToString(Session["Username"]); 
      LinkButton btn = (LinkButton)gvDocuments.FindControl("lbtnEdit"); 

       if (username == "user") 
       { 
        btn.Visible = false; 
       } 

     } 

누군가가 내가 잘못 갔다 좀 도와 줄래 ???

편집 됨 :

<asp:GridView ID="gvDocuments" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvDocuments_RowDataBound" OnRowCommand="gvDocuments_RowCommand" PageSize="5" Width="100%" RowStyle-BackColor="#9FCFFF" SortedAscendingHeaderStyle-VerticalAlign="Bottom" SortedAscendingHeaderStyle-HorizontalAlign="Left" BackColor="#9BCDFF" HeaderStyle-BackColor="#51A8FF"> 
    <asp:TemplateField HeaderText="Actions"> 
     <itemtemplate> 
      <asp:LinkButton ID="lbtnView" runat="server" CommandName="View" Text="View" ForeColor="#0033CC"></asp:LinkButton> 
      <asp:LinkButton ID="lbtnEdit" runat="server" CommandName="DocEdit" Text="Edit" ForeColor="#0033CC"></asp:LinkButton> 
      <asp:LinkButton ID="lbtnRenew" runat="server" CommandName="Email" Text="Email" ForeColor="#0033CC"></asp:LinkButton> 
     </itemtemplate> 
    </asp:TemplateField> 
</asp:GridView> 
+0

그리드 용 html 코드를 도울 수 있다면 알아낼 수 있도록 –

+0

무엇이 오류입니까? – tarzanbappa

+0

나는 그 대답 – Maes

답변

0

요구 사항에 따라이 샘플을 수정하십시오.

에서 .aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ddlGridview._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" AutoGenerateColumns ="False" OnRowEditing="GridView1_RowEditing" OnRowCommand="GridView1_RowCommand"> 
    <Columns> 
     <asp:TemplateField HeaderText ="ID"> 
      <ItemTemplate> 
       <asp:Label runat ="server" ID="lblID" Text ='<%#Eval("ID")%>'></asp:Label> 
       <asp:Label runat ="server" ID="Label1" Text ='<%#Eval("username")%>'></asp:Label> 
      </ItemTemplate> 

     </asp:TemplateField> 
     <asp:TemplateField HeaderText ="lk1"> 
      <ItemTemplate> 
      <asp:LinkButton runat ="server" ID ="lk1" CommandName ="Downl" Text ="lk1" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID") %>' ></asp:LinkButton> 
      </ItemTemplate> 

     </asp:TemplateField> 
      <asp:TemplateField HeaderText ="lk2"> 
      <ItemTemplate> 
      <asp:LinkButton runat ="server" ID ="lk2" CommandName ="approve" Text ="lk2" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID") %>'></asp:LinkButton> 
      </ItemTemplate> 

     </asp:TemplateField> 
      <asp:TemplateField HeaderText ="lk3"> 
      <ItemTemplate> 
      <asp:LinkButton runat ="server" ID ="lk3" CommandName ="rework" Text ="lk3" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"ID") %>'></asp:LinkButton> 
      </ItemTemplate> 

     </asp:TemplateField> 


    </Columns> 
</asp:GridView> 
</div> 
</form> 

CS 파일 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     GridView1.DataSource = CreateDataTable(); 
     GridView1.DataBind(); 
    } 

    private DataTable CreateDataTable() 
    { 
     DataTable myDataTable = new DataTable(); 

     DataColumn myDataColumn; 

     myDataColumn = new DataColumn(); 
     myDataColumn.DataType = Type.GetType("System.String"); 
     myDataColumn.ColumnName = "id"; 
     myDataTable.Columns.Add(myDataColumn); 

     myDataColumn = new DataColumn(); 
     myDataColumn.DataType = Type.GetType("System.String"); 
     myDataColumn.ColumnName = "username"; 
     myDataTable.Columns.Add(myDataColumn); 

     DataRow row; 

     row = myDataTable.NewRow(); 

     row["id"] = "1"; 
     row["username"] = "hungn"; 
     myDataTable.Rows.Add(row); 

     DataRow row1; 

     row1 = myDataTable.NewRow(); 

     row1["id"] = "2"; 
     row1["username"] = "hoanq"; 
     myDataTable.Rows.Add(row1); 

     return myDataTable; 
    } 

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
    { 

    } 

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 

     if (e.CommandName == "Downl") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 

      // get the GridViewRow where the command is raised 
      GridViewRow Row = ((GridViewRow)GridView1.Rows[index-1]); 
      LinkButton approve = Row.FindControl("lk1") as LinkButton; 

      approve.Enabled = true; 
      LinkButton rework = Row.FindControl("lk2") as LinkButton; 

      rework.Enabled = true; 
      LinkButton comment = Row.FindControl("lk3") as LinkButton; 

      comment.Enabled = false; 

     } 
    } 

여전히 문제에 직면 있으면 알려 주시기 바랍니다.

+0

고맙습니다. – Maes

+0

저에게 즐거움을드립니다. :-) – Sunny

0

대신 gvDocuments.FindControl, 당신은 각각의 항목에서 컨트롤을 찾아야합니다.

그래서 ...
e.Row.FindControl("lbtnEdit"); 

(이 오히려 <asp:GridView>보다 <asp:Repeaters>의 내 경험을 이용하지만 나의 이해는이 같은 것입니다.)

나의 이해는 다음이었다 사용 잘못되었습니다. MSDN에 따르면 .Item ... .Row

관련 문제