Skip to main content

Display SharePoint Users, Groups and Sites in a GridView and Use a DropDownList to filter the values

This article will explain how to display SharePoint Users, Groups and Sites in a Gridview and use a DropDownList to filter the values.
Step 1: Open the Visual Studio and create a new project; select visual webpart (I am giving an example using a visual webpart).
Step 2: Add the GridView to your user control, e.g.
<asp:GridView ID="gvLists" runat="server" AutoGenerateColumns="False"
CellPadding="4" EnableModelValidation="True" ForeColor="#333333"
GridLines="None" OnRowCommand="gvLists_RowCommand">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chk_Selected" runat="server" Style="position: static" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Country" HeaderText="Country" />
<asp:BoundField DataField="UserName" HeaderText="Role" />
<asp:BoundField DataField="Role" HeaderText="User Name" />
<asp:CommandField HeaderText="Select" ShowHeader="True" ShowSelectButton="True" />
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
Step 3: Code behind for the GridView will look like below:
protected void Page_Load(object sender, EventArgs e)
{

try
            {
DataTable dtLists = new DataTable();
                dtLists.Columns.Add("Country");
                dtLists.Columns.Add("UserName");
                dtLists.Columns.Add("Role");

//Get all users by site position and group.
SPSite spSite = new SPSite(SPContext.Current.Site.Url);
foreach (SPWeb web = spSite.AllWebs)
                {
foreach (SPGroup group in web.Groups;)
                        {
foreach (SPUser user in group.Users)
                            {
DataRow dr = dtLists.NewRow();
                                dr["Country"] = web.Title;
                                dr["Role"] = group.Name;
                                dr["User"] = user.LoginName;
                                dtLists.Rows.Add(dr);
                            }
                        }
                    }
                }
                gvLists.DataSource = dtLists;
                gvLists.DataBind();
            }
catch (Exception ex)
            {
throw ex;
            }

}
Step 4: Output

Share1.gif
Step 5: Next, add a Dropdown to filter data just above the GridView like this:
<table>
<tr>
<td>
  User :
</td>
<td class="style1">
<asp:DropDownList ID="filterUser" AutoPostBack="true" runat="server" EnableViewState="true"
onselectedindexchanged="filterUser_SelectedIndexChanged"></asp:DropDownList>
</td>
</tr>
<tr>
<td>
  Country :
</td>
<td >
<asp:DropDownList ID="filterCountry" AutoPostBack="true" runat="server" EnableViewState="true"
onselectedindexchanged="filterCountry_SelectedIndexChanged"></asp:DropDownList>
</td>
</tr>
<tr>
<td>
  Role :
</td>
<td >
<asp:DropDownList ID="filterRole" AutoPostBack="true" runat="server" EnableViewState="true"
onselectedindexchanged="filterRole_SelectedIndexChanged">
<asp:ListItem Text="--All Roles--" Value="All" Selected="True"></asp:ListItem>
<asp:ListItem Text="Super Administrator" Value="Super Administrator"></asp:ListItem>
<asp:ListItem Text="Regional Administrator" Value="Regional Administrator"></asp:ListItem>
<asp:ListItem Text="Marketing Administrator" Value="Marketing Administrator"></asp:ListItem>
<asp:ListItem Text="Country Administrator" Value="Country Administrator"></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
Step 6: Add the code behind for filters:
//call this method in page load to load the value
private void bindfilters()
        {
//for country
try
            {
                filterCountry.Items.Clear();
                filterUser.Items.Clear();
SPWeb oWeb = SPControl.GetContextWeb(Context);
                oWeb.AllowUnsafeUpdates = true;
                filterCountry.Items.Insert(0, new ListItem("--All Country--", "0"));
                filterUser.Items.Insert(0, new ListItem("--All users--", "0"));
foreach (SPUser user in oWeb.AllUsers)
                {
                    filterUser.Items.Add(user.LoginName);
                }
SPSite site = SPContext.Current.Site;
SPList listname = site.RootWeb.Lists[countrySiteListName];
foreach (SPListItem item in listname.Items)
                {
                    filterCountry.Items.Add(item[countrySiteCoulumnName].ToString());
                }
            }
catch (Exception ex)
            {
throw ex
            }
        }
//Action on dropdowns
/// <summary>
/// Filtering the gridview data based on Users
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void filterUser_SelectedIndexChanged(object sender, EventArgs e)
        {
try
            {
                filterCountry.ClearSelection();//.Items.Clear();
//filterUser.Items.Clear();
                filterRole.ClearSelection();
if (filterUser.SelectedItem.Text != "--All users--")
                {
DataTable dtLists = new DataTable();
                    dtLists.Columns.Add(countrySiteCoulumnName);
                    dtLists.Columns.Add("UserName");
                    dtLists.Columns.Add("Role");
//Get all users by site position and group.
SPSite site = SPContext.Current.Site;
SPList listname = site.RootWeb.Lists[countrySiteListName];

foreach (SPWeb web in SPContext.Current.Site.AllWebs)                    {

SPGroupCollection groupcoll = web.Groups;
foreach (SPGroup group in groupcoll)
                            {
SPUser user = group.Users[filterUser.SelectedItem.Text];
DataRow dr = dtLists.NewRow();
                                    dr["Country"] = web.Title;
                                    dr["Role"] = group.Name;                                    dr["UserName "] = user.LoginName;
                                    dtLists.Rows.Add(dr);

                       }

                     }
                    gvLists.DataSource = dtLists;
                    gvLists.DataBind();
                }
else
                {
                    GetUsers();
                }
            }
catch (Exception ex)
            {
            }
        }

/// <summary>
/// Filtering the gridview data based on Country
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void filterCountry_SelectedIndexChanged(object sender, EventArgs e)
        {
try
            {
                filterUser.ClearSelection();
                filterRole.ClearSelection();

if (filterCountry.SelectedItem.Text != "All")
                {

DataTable dtLists = new DataTable();
                    dtLists.Columns.Add("Country");
                    dtLists.Columns.Add("UserName");
                    dtLists.Columns.Add("Role");

SPSite spSite = new SPSite(SPContext.Current.Site.Url);
using (SPWeb web = spSite.AllWebs[filterCountry.SelectedItem.Text])
                    {
SPGroupCollection groupcoll = web.Groups;
foreach (SPGroup group in groupcoll)
                        {
// filterRole.Items.Add(group.Name);
foreach (SPUser user in group.Users)
                            {
DataRow dr = dtLists.NewRow();
                                dr["Country"] = web.Title;
                                dr["Role"] = group.Name; //role.Name;
                                dr["UserName"] = user.LoginName;
                                dtLists.Rows.Add(dr);
                            }
                        }
                    }
                    gvLists.DataSource = dtLists;
                    gvLists.DataBind();
                }
else
                {
                    GetUsers();
                }
            }
catch (Exception ex)
            {
                            }
        }

/// <summary>
/// Filtering the gridview data based on Role
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void filterRole_SelectedIndexChanged(object sender, EventArgs e)
        {
try
            {
                filterCountry.ClearSelection();//.Items.Clear();
                filterUser.ClearSelection();
//filterRole.ClearSelection();
if (filterRole.SelectedItem.Value != "All")
                {
DataTable dtLists = new DataTable();
                    dtLists.Columns.Add("Country");
                    dtLists.Columns.Add("UserName");
                    dtLists.Columns.Add("Role");
SPSite spSite = new SPSite(SPContext.Current.Site.Url);
foreach (SPWeb web = spSite.AllWebs)
                    {
SPGroup group = web.Groups[filterRole.SelectedItem.Text];
foreach (SPUser user in group.Users)
                                {
DataRow dr = dtLists.NewRow();
                                    dr["Country"] = web.Title;
                                    dr["Role"] = group.Name; //role.Name;
                                    dr["UserName"] = user.LoginName;
                                    dtLists.Rows.Add(dr);
                                }

                    }
                    gvLists.DataSource = dtLists;
                    gvLists.DataBind();
                }
else
                {
                     //method will load gridview complete data.
                    GetUsers();
                }
            }
catch (Exception ex)
            {
                           }
        }

Step 7: Output
Share2.gif
Hope you like this article....

Comments