Click here to Skip to main content
15,891,951 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
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:
VB
Grid.datasource=ds
grid.columns.insert(index,column)
grid.databind()

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.


Thanks
S.S.thakur

[Edit]Code block added[/Edit]
Posted
Updated 23-Feb-13 6:08am
v2
Comments
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">
<columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" />
</HeaderTemplate>
<itemtemplate>
<asp:CheckBox ID="chkSelect" runat="server" />


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




<asp:DataGrid AutoGenerateColumns="false" runat="server" ID="grid">
<columns>
<asp:BoundColumn DataField="ID" HeaderText="ID">
<asp:BoundColumn DataField="Name" HeaderText="Name">
<asp:TemplateColumn>
<itemtemplate>
<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
BindGrid()
End If

End Sub

Private Sub BindGrid()
Dim ds As DataSet = ds1()
gdMerge.DataSource = ds
AddBoundfield()
gdMerge.DataBind()
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
gdMerge.Columns.RemoveAt(i)
End If
Next
End Sub

Thank you
Sardar

1 solution

It is default behavior for dynamic control for ASP.net web form. Because ASP.net 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.
 
Share this answer
 

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900