0

我在显示 Active Directory 用户的 ASP.NET 应用程序中使用 ListBox。现在我想使用 ListView 但我不知道如何用数据填充它:(

我的应用程序:

用户在文本框中输入一个字符串(姓氏或其中的一部分)。比 ListBox 列出 TextBox 中具有相同字符串的所有 AD 用户。使用 asp.net 应用程序的用户在 ListBox 中选择了一行,并且关于一个按钮 (btn_ShowProperties),他看到了这个 AD 用户的所有属性。

编码:

protected void btnBenutzerSuchen_Click(object sender, EventArgs e)
        {
             //lboxBenutzer is the ListBox
           lboxBenutzer.Items.Clear(); 

           DirectoryEntry Entry =  new DirectoryEntry("LDAP://" + "Domain");

           string filter = "(&(objectClass=user)(objectCategory=person)(cn=" + txtBenutzer.Text + "*))";

           DirectorySearcher Searcher = new DirectorySearcher(Entry, filter);

              foreach (SearchResult res in Searcher.FindAll())
              {
                    //GetProperty is a Method to get the Informations from AD

                  string Benutzer = GetProperty(res, "sAMAccountName"); 
                  string eMail = GetProperty(res, "mail");
                  string Vorname = GetProperty(res, "givenName");
                  string Nachname = GetProperty(res, "sn");
                  string Telefon = GetProperty(res, "telephoneNumber");

                     //How I make this in a ListView? :(
                  lboxBenutzer.Items.Add(new ListItem(eMail + " | " + Benutzer + " | " + Nachname + ", " + Vorname + " | " + Telefon));
              }

        }

我的点子:

我想使用 ListView 因为 ListBox 的表示不正确。我的问题是向 ListView 添加一行。我能做些什么 :/ ?

PS:对不起我的英语不好。我来自德国:P

塔拉索夫

4

2 回答 2

1

创建一个具有所有五个属性的类并填充该类的实例数组。使用模板创建 ListView 并将数组绑定到列表视图,不要手动添加它们。此处示例:http: //msdn.microsoft.com/en-us/library/bb398790.aspx

于 2012-07-20T07:12:25.700 回答
1

这很简单,aListView是一个数据绑定控件,因此您可以使用与任何数据绑定控件(如GridVewFormViewListBox等)相同的绑定技术

由于您已经有一个Enumerable(基于您的代码:)Searcher.FindAll(),那么您只需绑定它:

ASPX

<asp:ListView runat="server" ID="myListView">
    <ItemTemplate>
        <asp:Label ID="Label1" Text='<%# Eval("Benutzer") %>' runat="server" /><br />
        <asp:Label ID="Label2" Text='<%# Eval("eMail") %>' runat="server" /><br />
        <asp:Label ID="Label3" Text='<%# Eval("Vorname") %>' runat="server" /><br />
        <asp:Label ID="Label4" Text='<%# Eval("Nachname") %>' runat="server" /><br />
        <asp:Label ID="Label5" Text='<%# Eval("Telefon") %>' runat="server" /><br />
    </ItemTemplate>
    <ItemSeparatorTemplate>
        <hr />
    </ItemSeparatorTemplate>
</asp:ListView>

绑定它的代码,后面的代码

var q = from s in Searcher.FindAll().OfType<SearchResult>()
        select new
        {
            Benutzer = GetProperty(s, "sAMAccountName"),
            eMail = GetProperty(s, "mail"),
            Vorname = GetProperty(s, "givenName"),
            Nachname = GetProperty(s, "sn"),
            Telefon = GetProperty(s, "telephoneNumber")
        };

this.myListView.DataSource = q;
this.myListView.DataBind();

编辑 1

添加表格布局:

    <asp:ListView runat="server" ID="myListView">
        <LayoutTemplate>
            <table runat="server" border="1">
                <tr runat="server">
                    <th runat="server">Benutzer</th>
                    <th runat="server">eMail</th>
                    <th runat="server">Vorname</th>
                    <th runat="server">Nachname</th>
                    <th runat="server">Telefon</th>
                </tr>
                <tr runat="server" id="ItemPlaceholder">
                </tr>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr runat="server">
                <td runat="server"><%# Eval("Benutzer")%></td>
                <td runat="server"><%# Eval("eMail")%></td>
                <td runat="server"><%# Eval("Vorname")%></td>
                <td runat="server"><%# Eval("Nachname")%></td>
                <td runat="server"><%# Eval("Telefon")%></td>
            </tr>
        </ItemTemplate>
    </asp:ListView>
于 2012-07-20T07:33:22.073 回答