asp.net - Asp.net Web Forms GridView 动态列问题
问题描述
我们有一个 4.7.2 版本的 .Net Web 表单应用程序。当我们以编程方式将列插入到 GridView 组件时,TemplateFields 在回发后不会呈现。我们找到了一个关于这个问题的话题。我认为这是一个 .Net 框架错误。帖子上有一个反馈网址,但我无法打开该页面。
反馈网址:
主题网址:
https://forums.asp.net/t/1102255.aspx?GridView+Columns+Insert+Problems
示例代码:
ASP->
<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 ->
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; }
}
解决方案
@yusuf,您需要将数据源重新绑定到 PostBack 上的 GridView。将数据 gridView.DataSource 保存到 Session 变量中,然后在 PostBack 上再次进行绑定。这将确保绑定不会丢失。
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
}
推荐阅读
- c# - 用 LINQ 查询中的 Where 替换 OrderBy
- elasticsearch - 在弹性搜索中使用 AND 和 OR 在不同字段上匹配文档
- python - 使用 Matplotlib 格式化绘图
- javascript - 在 JavaScript 中获取 MDI(物化设计图标)图像
- docker - 如何在 GCP 的 pod 中找到 kafka 的目录?
- android - Android 中带有自定义 RecyclerView 的 InflateException
- javascript - 没有在firebase中获得令牌
- javascript - 为什么高度不是由javascript设置的?
- android - 使用 livedata 进行 Android 视图模型单元测试
- symfony - 路由 symfony 中的多个可选参数