0

我有一个使用 PlaceHolder 的 ASP.NET 页面。网格以编程方式构建,并在页面运行时添加到此 PlaceHolder。例子:

ASPX 代码:

<asp:PlaceHolder ID="myPlaceHolder" runat="server" />

后面的代码:

foreach (var country in Tables.Countries())
{
  var nGrid = BuildGrid(country.Code);
  if (nGrid.Rows.Count > 0)
  {
      var lTitle = new Literal();
      lTitle.Text = "<h2>Stats for country " + country.Name + "</h2>";

      myPlaceHolder.Controls.Add(lTitle);
      myPlaceHolder.Controls.Add(nGrid);
  }
  nGrid.Dispose();
}

private GridView BuildGrid(short countryCode)
{
    GridView nGrid = new GridView();
    nGrid.ID = "gr_" + countryCode;
    nGrid.SkinID = "rpSkin";
    nGrid.AutoGenerateColumns = false;
    nGrid.AllowPaging = false;
    nGrid.AllowSorting = false;
    nGrid.RowStyle.VerticalAlign = VerticalAlign.Top;
    nGrid.EnableViewState = false;

    var nField = new BoundField
                                 {
                                     HeaderText = "People",
                                     DataField = "PeopleCount"
                                 };
                nGrid.Columns.Add(nField);

    // more BoundFields of this type exist

    // This is basically the GridViewHelper class that gets Row Totals
    // Disabling this doesn't help, either
    HelpGrid(nGrid);
    nGrid.DataSource = Country.GetPeople(countryCode);
    nGrid.DataBind();
    return nGrid;
}

此页面在 Opera 和 Firefox 中完美运行。Internet Explorer 8 显示“无法显示网页”屏幕。

有任何想法吗?

4

2 回答 2

0

这可能是你的问题吗?

于 2010-08-26T13:25:12.117 回答
0

以编程方式创建控件时,您总是会遇到大量问题。它可能在获取时起作用,但在发布时不起作用,您在 OnClick 处理程序中遇到问题等。您必须跳过很多障碍才能使编程控件正常工作。

在我看来,你真的不需要以编程方式创建这些。您可以像创建用户控件一样轻松创建网格控件,然后传递您的 DataSource。如果需要,您可以在运行时加载用户控件,然后删除整个构建网格动态部分,让 asp.net 处理混乱。

这并不是说你做不到,就像人们一直在做的那样。我只是建议您为自己做更多的工作以按照自己的方式去做。

于 2010-08-19T15:36:44.973 回答