首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp.net Web Forms GridView动态列发布

Asp.net Web Forms GridView动态列发布
EN

Stack Overflow用户
提问于 2020-08-21 22:29:36
回答 1查看 59关注 0票数 0

我们有一个4.7.2版本的.Net网页表单应用程序。当我们以编程方式将列插入到GridView组件中时,TemplateFields在回发后不会呈现。我们找到了一个关于这个问题的主题。我认为这是一个.Net框架错误。帖子上有一个反馈网址,但我打不开那个页面。

FeedBack url:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=104994&wa=wsignin1.0

主题url:

https://forums.asp.net/t/1102255.aspx?GridView+Columns+Insert+Problems

示例代码:

Aspx ->

代码语言:javascript
复制
 <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
   <asp:GridView ID="TestGrid" runat="server" AutoGenerateColumns="false">
       <Columns>
           <asp:BoundField HeaderText="Col1" DataField="Name" />
           <asp:TemplateField>
               <HeaderTemplate>
                   <asp:Label ID="Col2HeaderLabel" runat="server" Text="Col2"></asp:Label>
               </HeaderTemplate>
               <ItemTemplate>
                   <asp:CheckBox ID="Col2CheckBox" runat="server" />
               </ItemTemplate>
           </asp:TemplateField>
           <asp:BoundField HeaderText="Col3" DataField="Surname" />
       </Columns>
   </asp:GridView>

    <asp:Button ID="TestButton" runat="server" Text="Test" />
</asp:Content>

Aspx.cs ->

代码语言:javascript
复制
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            TestGrid.Columns.Insert(0,new BoundField { HeaderText = "Dynamic Col", DataField = "Description" });
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            TestGrid.DataSource = GetList();
            TestGrid.DataBind();
        }

        private List<Info> GetList()
        {
            List<Info> list = new List<Info>();
            list.Add(new Info { Description = "Row 1", Name = "Name 1", Surname = "Surname 1" });
            list.Add(new Info { Description = "Row 2", Name = "Name 2", Surname = "Surname 2" });
            list.Add(new Info { Description = "Row 3", Name = "Name 3", Surname = "Surname 3" });

            return list;
        }
    }

    public class Info
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Description { get; set; }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-08-22 01:53:16

@yusuf,您需要将数据源重新绑定到PostBack上的GridView。将数据gridView.DataSource保存到会话变量中,然后在PostBack上再次执行绑定。这将确保绑定不会丢失。

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
if (Session["gvDS"] != null && IsPostBack)
    {
        gridView1.DataSource = Session["gvDS"];
        gridView1.DataBind();
    }
    else
        BindGridView();


}

private void BindGridView()
{
  // Your SQL statements go here, etc, then:

  gridView1.DataSource = YourDataSetTable;
  gridView1.DataBind();

  Session["gvDS"] = gridView1.DataSource;  // save into Session

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63524788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档