1

私は、ASP.NET コードで DataList を使用していくつかのラベルを動的に生成することに数日間取り組んできましたが、私の人生では、コントロールを画面に表示することはできません。問題は小さな構文上の問題か、設定を忘れた HTML タグであると確信しています。データのリストが実際にデータソースに取り込まれていることをデバッガーで確認しました。HTML コードの「デザイン」ビューを表示すると、コントロールが表示されます。ただし、ページを実行すると、コントロールが表示されません。なぜこれが起こっているのかについての洞察は非常に高く評価されます。

以下は、質問に関連するコードです...

C# 部分クラス:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            InventoryService service = new InventoryService();

            ArrayList foundYears = service.FindYears();
            DataSet ds = new DataSet();
            ds.Tables.Add("Years");
            ds.Tables[0].Columns.Add("Year");

            foreach (string yr in foundYears)
            {
                if (yr != "")
                {
                    DataRow dr = ds.Tables[0].NewRow();
                    dr["Year"] = yr;
                    ds.Tables[0].Rows.Add(dr);
                }
            }

            DataList headerRepeater = new DataList();
            headerRepeater.DataSource = ds.Tables[0];
            headerRepeater.DataKeyField = "Year";
            headerRepeater.DataBind();
            headerRepeater.Visible = true;
        }
    }

HTML 部分クラス:

<table width="100%" align="center">
    <tr>
        <td style="width: 868px">
             <asp:DataList id='headerRepeater' Runat='server' CellPadding='5' CellSpacing='15' GridLines='Vertical' HorizontalAlign='Left' RepeatColumns='30' RepeatDirection='Horizontal' RepeatLayout='Table' ShowFooter='False' ShowHeader='False' Visible = 'True' CssClass='DataList' DataKeyField ='Year'>
            <ItemTemplate>
                <asp:Label runat='server' ID='lblItemName' Text='<%# DataBinder.Eval(Container.DataItem, "Year") %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:DataList>
    </td>
</tr>
<tr>
4

3 に答える 3

3

次のように言うと、新しいローカル変数を作成しています。

DataList headerRepeater = new DataList(); .

この行を Page_Load から削除すると、ページは正常に動作するはずです。

Page Load イベントがトリガーされるまでに、データ リストはすでに Page Control コレクションに追加されています。

于 2010-12-29T19:12:32.680 に答える
2
// Why do you create a new variable named 'headerRepeater' here?    
DataList headerRepeater = new DataList(); 
headerRepeater.DataSource = ds.Tables[0];
headerRepeater.DataKeyField = "Year";
headerRepeater.DataBind();
headerRepeater.Visible = true;

次の行を削除します。

DataList headerRepeater = new DataList(); 
于 2010-12-29T19:14:48.797 に答える
1

DataList の新しいインスタンスを作成していて、ページ コントロールに追加していません。

DataList headerRepeater = new DataList(); //The problem is here ControlThatWillHoldTheDataList.Controls.Add(headerRepeater); //My Addition
headerRepeater.DataSource = ds.Tables[0];
headerRepeater.DataKeyField = "Year";
headerRepeater.DataBind();
headerRepeater.Visible = true;

于 2010-12-29T19:12:05.623 に答える