0

ASPX ページの分離コード内で、従業員に関する詳細をほとんど取得しません (外部データ ソースから読み取ります)。最後に、以下の方法で示したいと思います。以下の表示は正しくない可能性がありますが、ヘッダー/列アプローチを使用した単純なテーブルです。

___________________________________________________________________________________
|                        DEPT        | HR                                          | |__________________________________________________________________________________|
|     Employee Image                 | Emp Name       | Hire Date                  |
|____________________________________|_____________________________________________|
|        Steve.gif                   | Steve Jobs     |  22/05/1979                |
|____________________________________|_____________________________________________|
|        Mark.gif                    | Mark Miller    |  22/05/1949                |
|____________________________________|_____________________________________________|
|                        DEPT        | Operations                                  | |__________________________________________________________________________________|
|     Employee Image                 | Emp Name       | Hire Date                  |
|____________________________________|_____________________________________________|

データはさまざまなデータ ソースから収集され、コード ビハインド内で最終的に利用可能になります。上記の方法で表示したい。

最善のアプローチは何ですか?htmldivcontrol を作成し、これらすべての値を追加することを考えました。最後に、div タグをページにバインドします。

現在、アプローチを試みていますが、より良いアプローチがあるかどうかを知りたいです。

あなたの見解と例を共有してください。_

4

4 に答える 4

6

私の意見では、次のように Repeater を使用するのが最善の方法です。

<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_RowDataBound">
        <ItemTemplate>
            <table runat="server" style="color: White; background-color: #3A4F63;" visible="false"
                id="headerTable">
                <tr>
                    <td colspan="3" align="center">
                        <asp:Label ID="headerTitle" runat="server"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td style="width: 200px; background-color: #3A4F63; color: White;">
                        Image 
                    </td>
                    <td style="width: 200px;">
                        Name
                    </td>
                    <td style="width: 200px;">
                        Hire Date
                    </td>
                </tr>
            </table>
            <!-- These are the actual data items -->
            <!-- Bind to your specific properties i.e. Employees. -->
            <table>
                <tr>
                    <td style="width: 200px;">
                        <asp:Image ID="img" runat="server" ImageUrl='<%#Eval("ImageUrl") %>'></asp:Image>
                    </td>
                    <td style="width: 200px;">
                        <asp:Label ID="lblName" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
                    </td>
                    <td style="width: 200px;">
                        <asp:Label ID="lblHireDate" runat="server" Text='<%#Eval("HireDate") %>'></asp:Label>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:Repeater>

そして、あなたのコードビハインドでは、次のようなものです:

private string currentDepartment =string.Empty;

protected void rpt_RowDataBound(object sender, RepeaterItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        //Binding to Employee object.
        if (currentDepartment!= (e.Item.DataItem as Employee).Department) {
        currentDepartment = (e.Item.DataItem as Employee).Department;
            e.Item.FindControl("headerTable").Visible = true;
            (e.Item.FindControl("headerTitle") as Label).Text = (e.Item.DataItem as Employee).Department;
        }
            else {
            e.Item.FindControl("headerTable").Visible = false;
        }
    }
}

次のように定義されるList<Employee>場所にグリッドをバインドする必要があります。Employee

public class Employee
{
   public string Department {get;set;}
   public string ImageUrl {get;set;}
   public DateTime HireDate {get;set;}
   public string Name {get;set;}
}

ただし、拘束される前に部門によって注文される必要があります。

リピーターを設定するサンプルコード

private void bindGridView()
{
    List<Employee> emps = new List<Employee>();
    for (int i = 0; i < 5; i++)
    {
        Employee e = new Employee();
        if (i % 2 == 0)
        {
            e.Department = "Human resources";
            e.HireDate = DateTime.Now.AddDays(-i);
            e.ImageUrl = @"http://www.freedigitalphotos.net/images/gal_images/av-_146.jpg";
        }
        else
        {
            e.Department = "Information Technology";
            e.HireDate=DateTime.Now.AddMonths(-i);
            e.ImageUrl = "http://www.freedigitalphotos.net/images/gal_images/av-_314.jpg";

        }

        e.Name = "Employee " + i;
        emps.Add(e);

    }
    rpt.DataSource = emps.OrderBy(x=>x.Department);
    rpt.DataBind();
}

プロデュース

ここに画像の説明を入力

于 2011-11-09T04:17:02.890 に答える
1

GridViewがおそらく最適です

于 2011-11-08T21:46:10.943 に答える
0

いくつかのオプションがあります。

1 つの方法は、すべての異種データを、その場で作成してデータ ソースにバインドする単一のデータ テーブルに結合することです。

もう1つは、あなたが提案したことを単純に行い、関連する情報でd​​ivを発行することです。

3 つ目は、aspx ファイルでテーブルを定義し、asp:label コントロールを使用することです。コード ビハインドで、さまざまなデータ ソースからラベル コントロールを設定します。

これらのオプションを考えると、おそらく3番目のオプションを使用します。必要なときに表示を再構成/変更するのが最も簡単に思えます。

于 2011-11-09T04:01:24.387 に答える
0

テーブルを動的に実行することを考えていますか? 今後、編集に苦労することになります。マークアップ (.aspx) で通常の HtmlTable を作成し、いくつかのラベルと画像を配置してから、コード ビハインドに入力してみませんか? 特別な理由はありますか?

于 2011-11-09T03:54:54.147 に答える