我有一个使用占位符的ASP.NET页面。网格通过编程构建,并在运行页面时添加到该占位符中。例子:

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向我展示了“无法显示网页”屏幕。

有任何想法吗?

有帮助吗?

解决方案

其他提示

当编程创建控件时,您总是会遇到很多问题。它可能会在GET上工作,但在帖子上不行,您在OnClick处理程序等中遇到了问题。

在我看来,这确实不像您绝对需要编程创建这些。您可以像用户控件一样轻松地创建网格控件,然后传递数据源。如果需要的话,您可以在运行时加载用户控件,然后将整个构建电网动态置于零件,然后让ASP.NET照顾混乱。

这并不是说您不能这样做,就像人们一直这样做。我只是建议您为自己的方式做更多的工作,以做更多的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top