2012-09-12 2 views
0

LinqDataSource을 사용하여 바인딩하는 GridView이 있습니다. 나는 Session에 저장되어있는 userid 값을 기반으로 GridView을 필터링하려고합니다. 또한 사용자가 관리자인지 확인하기 위해 Session이 있습니다.사용자 ID에 따라 필터 GridView가

  1. 사용자 만하면 - 모든 user_ids보기 - 관리하는 경우 필터 GridView이 (열) == 세션 [ "용자 ID"]
  2. USER_ID합니다.

나는 (관리자는 USER_ID = 1가) 사용자에 대한 여러 가지 방법으로 그것을 필터링 할 수 있지만 나중에 관리에 대한 모든 것을 표시하지 않도록하는 방법을 관리했습니다.

누군가 아이디어가 있습니까?

<asp:GridView ID="GridView1" runat="server" 
    CausesValidation="False" 
    GridLines="None" 
    AllowPaging="True" 
    CssClass="mGrid" 
    PagerStyle-CssClass="pgr" 
    AlternatingRowStyle-CssClass="alt" AutoGenerateColumns="False" 
     DataSourceID="LinqDataSource2" DataKeyNames="event_id"> 
    <AlternatingRowStyle CssClass="alt"></AlternatingRowStyle> 

    <Columns> 
     <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
     <asp:BoundField DataField="event_id" HeaderText="event_id" ReadOnly="True" 
      SortExpression="event_id" InsertVisible="False" /> 
     <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" /> 
     <asp:BoundField DataField="description" HeaderText="description" 
      SortExpression="description" /> 
     <asp:BoundField DataField="event_start" HeaderText="event_start" 
      SortExpression="event_start" /> 
     <asp:BoundField DataField="event_end" HeaderText="event_end" 
      SortExpression="event_end" /> 
     <asp:BoundField DataField="user_id" HeaderText="user_id" 
      SortExpression="user_id" /> 
    </Columns> 

    <PagerStyle CssClass="pgr"></PagerStyle> 
</asp:GridView> 

<asp:LinqDataSource ID="LinqDataSource2" runat="server" 
    ContextTypeName="DataClassesDataContext" EntityTypeName="" 
    TableName="calevents" EnableDelete="True" 
    EnableInsert="True" EnableUpdate="True" Where="user_id = @user_id"> 

</asp:LinqDataSource> 

내가 해봤 일 (수동 데이터 바인딩)의 일부 : 여기

내 영문 나를이 편집을 오버라이드 (override) 할 필요가 있습니다

// Registered users may only edit their own events 
    DataClassesDataContext dc = new DataClassesDataContext(); 
    var events = from a in dc.calevents 
       where a.user_id == userId() 
       select a; 

    GridView1.DataSource = events; 
    GridView1.DataBind(); 

또는 다음, 취소 메소드 업데이트.

// Registered users may only edit their own events 
protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    if (Session["admin"] != "admin") 
    { 
     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      for (int j = 0; j < GridView1.Columns.Count; j++) 
      { 
       if (GridView1.Rows[i].Cells[j].Text != userId().ToString()) 
       { 
        GridView1.Rows[i].Visible = false; 
        Label1.Text = GridView1.Rows.Count.ToString(); 
       } 
       else 
        GridView1.Rows[i].Visible = true; 
      } 
     } 
    } 
} 

답변

1

당신이 때라도 뭔가를 할 수 있습니다 ...

page_load() 
{ 
    if user is not admin put folllowing... 

     LinqDataSource2.Where = "user_id = @user_id" 

    else 

     do not filter 

} 

은 그래서 당신은 관리자의 ID를 이후 순간에 ..이 작업을 수행 할 수있는이 방법은 1.

+0

감사 1이 필터 rocord입니다 너 ... 내가 해결 : if (Session [ "admin"] == null) LinqDataSource2.Where = "user_id ="+ userId(); else LinqDataSource2.Where = "user_id = @user_id"; – Mix

+0

누가 일 했니? 콩고. –

관련 문제