Click here to Skip to main content
12,819,421 members (30,576 online)
Rate this:
Please Sign up or sign in to vote.
Hi ,

I am facing a strange problem while working gridview .Here is the problem description:

I am using a gridview which consist of boundfields and templatefields. templatefields contains some controls like check boxes and image. My gridview contains one template field at last colummn. My requirement is to add the N nnumber of boundfields before last templatefield at runtime. I have added the code something like this:

Now the gridview displays all the boundfields and tempaltefields(with controls added within it) along with the newly added boundfields. But the controls within templatefield disappears on page postback however newly added boundfields are displayed correctly.

I tried to disable the gridview viewstate and binded the grid on onInit/PreRender event of page in this case controls are visible but here faced some other problem. in this case the gridview.rows.count is zero and gridview rows are not readable.

Can anyone help me solving this strange problem.


[Edit]Code block added[/Edit]
Posted 23-Feb-13 7:07am
Updated 23-Feb-13 7:08am
S. M. Ahasan Habib 24-Feb-13 0:58am
Please upload your markup code. When you bind your grid with data source then do you conditionlly bind that like If Page.IsPostBack?
Member 4276543 25-Feb-13 9:05am
Hi Habib,
Below is the markup code:
<asp:GridView ID="gdMerge" AutoGenerateColumns="false" runat="server">
<asp:CheckBox ID="chkAll" runat="server" />
<asp:CheckBox ID="chkSelect" runat="server" />

<asp:BoundField DataField="ID" HeaderText="ID">
<asp:BoundField DataField="Name" HeaderText="Name">
<asp:Image ID="imgCheck" class="test" runat="server" ImageUrl="~/Images/icon_delete.png" />

<asp:DataGrid AutoGenerateColumns="false" runat="server" ID="grid">
<asp:BoundColumn DataField="ID" HeaderText="ID">
<asp:BoundColumn DataField="Name" HeaderText="Name">
<asp:Image ID="imgCheck" class="test" runat="server" ImageUrl="~/Images/icon_delete.png" />

Below is .vb code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
End If

End Sub

Private Sub BindGrid()
Dim ds As DataSet = ds1()
gdMerge.DataSource = ds
End Sub

Private Sub AddBoundfield()

Dim column As New BoundField With {.HeaderText = "New Column"}
gdMerge.Columns.Insert(gdMerge.Columns.Count - 1, column)
For i As Integer = 0 To gdMerge.Columns.Count - 2
If gdMerge.Columns(i).HeaderText = "New Column" Then
End If
End Sub

Thank you

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

It is default behavior for dynamic control for web form. Because can not remember dynamic object using viewstate. For example if you create a textbox dynamically from your load event and add that to any panel using condition like if !Page.IsPostBack then first time you see the TextBox in your form but next time when it postback then the textbox will be destroyed. What you will do every postback/non postback you need to create that textbox and add to the panel control. Same thing happen here for Your BoundField control in GridView. So you can do is everytime you should create that BoundField and attached to grid.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

    Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy | Mobile
Web02 | 2.8.170308.1 | Last Updated 25 Feb 2013
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100