マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

所属しているすべてのグループを表示する画面のWebアプリのコード(C#)

所属しているすべてのグループを表示する画面の Web アプリの C# のコードです。

//プライベートフィールド

private DomainObject member;  //メンバー

private Dictionary<string, DomainGroup> allGroups;  //全グループ(Key:distinguishedName)

private List<string> addedDistinguishedNames;   //リストに追加したグループの識別名

 

//イベントハンドラ

protected void Page_Load(object sender, EventArgs e)

{

  var name = Request.QueryString["name"];   //名前

  if (String.IsNullOrEmpty(name))

  {

    return;

  }

 

  CategoryType category;  //Directory オブジェクトの種類

  if (Enum.TryParse<CategoryType>(Request.QueryString["category"], out category) == false)

  {

    return;

  }

  if (this.IsPostBack)

  {

    return;

  }

 

  switch (category)   //Directory オブジェクトの種類

  {

    case CategoryType.User:

      member = DomainUser.FindByName(name);   //ユーザーを検索

      break;

    case CategoryType.Group:

      member = DomainGroup.FindByName(name);  //グループを検索

      break;

    case CategoryType.Computer:

      member = Computer.FindByName(name);     //コンピューターを検索

      break;

  }

  if (member == null)

  {

    return;

  }

 

  allGroups = DirectoryAccess.GetGroups<DomainGroup>().ToDictionary(

    group => group.Entry.Properties["distinguishedName"].Value.ToString(), group => group);

  addedDistinguishedNames = new List<string>();

  this.AddChildNode();  //子ノードを追加

  this.GroupListBox.DataSource = CreateGroupTable();  //データソース用のテーブルを作成

  this.GroupListBox.DataTextField = "Text";

  this.GroupListBox.DataValueField = "Value";

  if (addedDistinguishedNames.Count > 1)

  {

    this.GroupListBox.Style.Add(HtmlTextWriterStyle.BorderStyle, "None");

  }

  else

  {

    this.ViewRadioButtonList.Enabled = false;

  }

  this..GroupListBox.DataBind();

  member.Dispose();

  DirectoryAccess.DisposeItems(allGroups.Values);

}

 

protected void ViewRadioButtonList_SelectedIndexChanged(object sender, EventArgs e)

{

  this.GroupTreeView.Visible = this.ViewRadioButtonList.SelectedIndex == 0;

  this.GroupListBox.Visible = !this.GroupTreeView.Visible;

}

 

//プライベートメソッド

//子ノードを追加

private void AddChildNode()

{

  var node = new TreeNode(member.ToString(), member.Name);

  this.GroupTreeView.Nodes.Add(node);

  if ((member.Category == CategoryType.User) || (member.Category == CategoryType.Computer))

  {

    //プライマリー グループを追加

    var primaryGroupId = (member.Category == CategoryType.User) ?

      ((DomainUser)member).PrimaryGroupId : ((Computer)member).PrimaryGroupId;

    var group = allGroups.Values.Cast<DomainGroup>().Single(grp => grp.Token == primaryGroupId);

    this.AddChildNode(node, group);   //子ノードを追加

  }

  //所属するグループを追加

  foreach (string memberOf in member.Entry.Properties["memberOf"])

  {

    this.AddChildNode(node, allGroups[memberOf]);   //子ノードを追加

  }

}

 

//子ノードを追加

private void AddChildNode(TreeNode node, DomainGroup group)

{

  var displayName = String.Format("{0}({1})", group.Name, group.Scope);   //表示するテキスト

  var distinguishedName = group.Entry.Properties["distinguishedName"].Value.ToString();   //識別名

  var childNode = new TreeNode(displayName, group.Name);  //ノードを作成

  node.ChildNodes.Add(childNode);

  if (addedDistinguishedNames.Contains(distinguishedName) == false)

  {

    addedDistinguishedNames.Add(distinguishedName);   //識別名を追加

  }

  //ネストしているグループを追加

  foreach (string memberOf in group.Entry.Properties["memberOf"])

  {

    this.AddChildNode(childNode, allGroups[memberOf]);  //子ノードを追加

  }

}

 

//データソース用のテーブルを作成

private DataTable CreateGroupTable()

{

  var table = new DataTable();

  table.Columns.Add(new DataColumn("Value", typeof(string)));   //値(distinguishedName)

  table.Columns.Add(new DataColumn("Text", typeof(string)));    //表示するテキスト

  foreach (var distinguishedName in addedDistinguishedNames)

  {

    var row = table.NewRow();

    var group = allGroups[distinguishedName];

    var displayName = String.Format("{0}({1})", group.Name, group.Scope);

    row[0] = distinguishedName;

    row[1] = displayName;

    table.Rows.Add(row);

  }

  return table;

}

 

内容的には Windows アプリと同じです。説明は VB の方に書いてますのでそちらをご覧ください。

 

 

Active Directory 関連 Blog

http://www.pbyk.com/blog/bloglist.html

投稿日時 : 2015年1月10日 3:24

コメントを追加

# ブルガリコピー 2017/07/12 13:37 luzkodtixo@outlook.com

2017年の新素材-新作
ブランド腕時計、バッグ、財布、小物などでございます専売店
★弊社は「信用第一」をモットーにお客様にご満足頂けるよう
★全物品運賃無料(日本全国)
★不良品物情況、無償で交換します.
★税関没収する商品は再度無料で発送します!
ブルガリコピー http://www.msnwatchs.com

# OrcWUpPSiYiPVnlOEM 2017/07/31 0:26 JimmiXzSqc

rbZhRr http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com

# ブランドバッグ 2017/08/03 21:01 nruxqg@outlook.com

時計,バッグ,財布,ルイヴィトンコピー,エルメスコピー
弊店に主要な販売する商品は時計,バッグ,財布,ルイヴィトンコピー,エルメスコピー,
シャネルコピー,グッチコピー,プラダコピー,ロレックスコピー,カルティエコピー,オメガコピー,
ウブロ コピーなどの世界にプランド商品です。2006年に弊社が設立された、
弊社は自社製品を世界中に販売して、高品質な製品と優れたアフターサービスで、
過半数の消費者からの良い評判を獲得していた。我々自身の生産拠点と生産設備を持って、
製品の質を保証すると消費者にサポートするために、製品も工場で厳格な人工的なテストを受けました。
消費者の継続的なサポートに感謝するために、そして、企業が低コスト、高品質な製品を提供してあげます。
弊店に望ましい製品を見つけることを願って。ここで、弊社が皆の仕事でも幸せな人生でも成功することを望んてあげます。

誠にありがとうございます。
ブランドバッグ http://www.ginza66.com

# ロレックス時計コピー 2021/12/07 20:59 pnghmpesc@live.jp

ヴィトンコピー品激安販売店2019新品大SALE
ルイ・ヴィトンコピー品激安販売店の新品大SALEが開催します。
ルイヴィトン人気コピー品、コピールイヴィトン新作、ルイヴィトンダミエコピー、ルイヴィトンモノグラムコピー、コピーブランド腕時計…
いろいろ新品が続々登場します。バッグ、靴、帽子、スカーフ...
お綺麗を展示ため、ぜひおすすめの逸品です。
時間の制限がない、いつでもご愛用頂きます。

タイトル
名前
URL
コメント