【问题标题】:Sys.WebForms.PageRequestManagerServerErrorException: Invalid column name:Sys.WebForms.PageRequestManagerServerErrorException:列名无效:
【发布时间】:2014-10-31 05:46:39
【问题描述】:

我正在我的一个项目中创建动态网格。我在Page_Init 方法中添加了网格代码。通常我使用按预期工作的绑定列或模板列。 代码如下:

protected void Page_Init(object source, System.EventArgs e)
{
     if (Session["colnames"] != null)
     {
         List<CommanIdTitle> CategoryIdTitle = new List<CommanIdTitle>();
         MainSubCategory CateMarks = (MainSubCategory)Session["colnames"];
         GridBoundColumn boundColumn_StudentId;
         boundColumn_StudentId = new GridBoundColumn();
         boundColumn_StudentId.DataField = "StudentId";
         boundColumn_StudentId.HeaderText = "Student Id";
         boundColumn_StudentId.UniqueName = "StudentId";
         boundColumn_StudentId.AllowFiltering = false;
         boundColumn_StudentId.Display = false;
         Grid_CategoryMarks.MasterTableView.Columns.Add(boundColumn_StudentId);

         GridBoundColumn boundColumn_StudentName;
         boundColumn_StudentName = new GridBoundColumn();
         boundColumn_StudentName.DataField = "StudnetName";
         boundColumn_StudentName.HeaderText = "Student Name";
         boundColumn_StudentName.UniqueName = "StudentName";
         boundColumn_StudentName.AllowFiltering = false; 

         Grid_CategoryMarks.MasterTableView.Columns.Add(boundColumn_StudentName);

         GridTemplateColumn templateColumn_AverageFinal;
         templateColumn_AverageFinal = new GridTemplateColumn();
         templateColumn_AverageFinal.ItemTemplate = new MyTemplate2("0");
         templateColumn_AverageFinal.UniqueName = "Average";
         templateColumn_AverageFinal.HeaderText = "Test";
         templateColumn_AverageFinal.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
         templateColumn_AverageFinal.AllowFiltering = false;
         templateColumn_AverageFinal.ReadOnly = true;
         Grid_CategoryMarks.MasterTableView.Columns.Add(templateColumn_AverageFinal);
    }
}

但现在的新要求是对其中的一些列进行分组。所以我加了GridGroupColumn

这是新代码:

protected void Page_Init(object source, System.EventArgs e)
{
    if (Session["colnames"] != null)
    {
        List<CommanIdTitle> CategoryIdTitle = new List<CommanIdTitle>();
        MainSubCategory CateMarks = (MainSubCategory)Session["colnames"];
        GridBoundColumn boundColumn_StudentId;
        boundColumn_StudentId = new GridBoundColumn();
        boundColumn_StudentId.DataField = "StudentId";
        boundColumn_StudentId.HeaderText = "Student Id";
        boundColumn_StudentId.UniqueName = "StudentId";
        boundColumn_StudentId.AllowFiltering = false;
        boundColumn_StudentId.Display = false;
        Grid_CategoryMarks.MasterTableView.Columns.Add(boundColumn_StudentId);

        GridBoundColumn boundColumn_StudentName;
        boundColumn_StudentName = new GridBoundColumn();
        boundColumn_StudentName.DataField = "StudnetName";
        boundColumn_StudentName.HeaderText = "Student Name";
        boundColumn_StudentName.UniqueName = "StudentName";
        boundColumn_StudentName.AllowFiltering = false;
        Grid_CategoryMarks.MasterTableView.Columns.Add(boundColumn_StudentName);

        /*This code throws error*/
        GridColumnGroup groupHeaderFinal = new GridColumnGroup();
        groupHeaderFinal.Name = "TotalAveragePerTerm";
        groupHeaderFinal.HeaderText = "Total Average Per Term";
        groupHeaderFinal.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        Grid_CategoryMarks.MasterTableView.ColumnGroups.Add(groupHeaderFinal);

        GridTemplateColumn templateColumn_AverageFinal;
        templateColumn_AverageFinal = new GridTemplateColumn();
        templateColumn_AverageFinal.ItemTemplate = new MyTemplate2("0");
        templateColumn_AverageFinal.UniqueName = "Average";
        templateColumn_AverageFinal.HeaderText = "";
        templateColumn_AverageFinal.ColumnGroupName = "TotalAveragePerTerm";
        templateColumn_AverageFinal.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        templateColumn_AverageFinal.AllowFiltering = false;
        templateColumn_AverageFinal.ReadOnly = true;
        Grid_CategoryMarks.MasterTableView.Columns.Add(templateColumn_AverageFinal);
    }
}

当我在任何回发中添加此内容时,发生错误

Sys.WebForms.PageRequestManagerServerErrorException:列名无效:

我发现的一个解决方案是设置网格的EnableViewState = False。但如果我这样做,viewstate 将不会被维护并且网格会崩溃并且所有数据都会丢失。

这是我的设计代码

<telerik:RadGrid ID="Grid_CategoryMarks" runat="server" EnableViewState="true"
        AllowFilteringByColumn="True" AllowSorting="True" 
        ShowGroupPanel="false" AutoGenerateColumns="False" PageSize="10" 
        ShowStatusBar="true"  OnNeedDataSource="Grid_CategoryMarks_NeedDataSource"  OnItemDataBound="Grid_CategoryMarks_ItemDataBound"
        ShowFooter="True" FilterItemStyle-HorizontalAlign="Left">
    <ClientSettings AllowDragToGroup="True">
        <Selecting AllowRowSelect="false" UseClientSelectColumnOnly="true"/>
        <Scrolling AllowScroll="true" UseStaticHeaders="true" SaveScrollPosition="true"/>
    </ClientSettings> 
    <MasterTableView  AutoGenerateColumns="false" >
        <NoRecordsTemplate>
            <asp:Label ID="lbl_rec_msg" runat="server" Text="No record exist"></asp:Label>
        </NoRecordsTemplate>
    </MasterTableView>
</telerik:RadGrid>

【问题讨论】:

    标签: asp.net telerik-grid dynamic-columns


    【解决方案1】:

    我遇到了类似的问题。问题是您在设计中定义了网格并在page_init 方法中再次创建它。

    从设计中删除它并尝试从后面的代码中创建。所以每次都会创建新的瞬间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多