0

GridViewを使用してバインドしているを持っていLinqDataSourceます。GridView(に格納されている)ユーザーIDの値に基づいてフィルタリングしたいと思いSessionます。またSession、ユーザーが管理者であるかどうかを判断するためのもあります。

  1. ユーザーのみの場合GridView-user_id(column)==Session["userid"]にフィルターします
  2. adminの場合-すべてのuser_idを表示します。

私はユーザーのためにそれをさまざまな方法でフィルタリングすることができましたが、後で管理者のためにすべてを表示する方法はありません(adminはuser_id = 1です)。

誰かが何か考えを持っていますか?

これが私のaspxです:

<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>

私が試したことのいくつか(手動データバインディング):

    // 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();

または以下の場合、edit、cancel、updateメソッドをオーバーライドする必要があります。

// 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;
            }
        }
    }
}
4

1 に答える 1

1

あなたは次のようなことをすることができます...

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

       LinqDataSource2.Where = "user_id = @user_id"

   else

      do not filter

}

したがって、この方法でこれを行うことができます。現時点では、管理者IDが1であるため、rocordを1でフィルタリングします。

于 2012-09-12T11:40:11.780 に答える