GridView - Retrieve invisible column information

  • Thread starter Thread starter Mel
  • Start date Start date
M

Mel

I have 10 columns total. 3 of them are invisible. The rest are read-
only BoundFields, 3 of which are editable fields using
TemplateFields. Upon editing, I want to validate what the user enters
against one of those invisible columns. How do I accomplish this?
The code below that I attempted just returns an empty string when I
try to retrieve the invisible column data:

gvParts.Rows(e.RowIndex).Cells(8).Text


Any help would be greatly appreciated.
 
If they're always going to be invisible, as such, you can't access them
during run-time.
to get around that, you can copy the labels or textboxes from the invisible
columns into visible columns, making the labels/textboxes invisible - then,
you can programmatically use the FindControl method in that particular row,
to find you data to validate against.
 
If they're always going to be invisible, as such, you can't access them
during run-time.
to get around that, you can copy the labels or textboxes from the invisible
columns into visible columns, making the labels/textboxes invisible - then,
you can programmatically use the FindControl method in that particular row,
to find you data to validate against.

Yuck, but I'll try anything at this point. So maybe I could add an
invisible drop-down box that is bound to the same AccessDataSource
that my GridView uses... Hmmm. I'll give it a whirl.
Thanks.
 
Server controls with Visible=false don't render to client and don't come
back on postbacks. A simple work around is to leave Visible=true and hide
the controls with css rule display:none.
 
Mel,

It looks like your three column are the keys for the grid - you could
utilize built in functionality - DataKeyNames property (comma separated) -
and do not have to create columns for them.
then on the postback you can use DataKeys[e.RowIndex] - it will return your
three values
 
Server controls with Visible=false don't render to client and don't come
back on postbacks. A simple work around is to leave Visible=true and hide
the controls with css rule display:none.

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]http://msmvps.com/blogs/egoldin


I have 10 columns total. 3 of them are invisible. The rest are read-
only BoundFields, 3 of which are editable fields using
TemplateFields. Upon editing, I want to validate what the user enters
against one of those invisible columns. How do I accomplish this?
The code below that I attempted just returns an empty string when I
try to retrieve the invisible column data:

Any help would be greatly appreciated.

Do you have an example of how to implement the display:none CSS rule?
I attempted it yesterday and I didn't see any difference; the columns
were still visible.

Mel
(Using Visual Studio 2005, Asp.net 2.0, Visual Basic, WinXP Pro SP2)
 
Sure, somethink like

<asp:BoundColumn DataField="MyField" >
<ItemStyle CssClass="Invisible"></ItemStyle>
<HeaderStyle CssClass="Invisible"></HeaderStyle>
</asp:BoundColumn>

and

..Invisible{display:none}

somewhere in styles.

--
Eliyahu Goldin,
Software Developer
Microsoft MVP [ASP.NET]
http://msmvps.com/blogs/egoldin
http://usableasp.net


Mel said:
Server controls with Visible=false don't render to client and don't come
back on postbacks. A simple work around is to leave Visible=true and hide
the controls with css rule display:none.

--
Eliyahu Goldin,
Software Developer & Consultant
Microsoft MVP [ASP.NET]http://msmvps.com/blogs/egoldin


I have 10 columns total. 3 of them are invisible. The rest are read-
only BoundFields, 3 of which are editable fields using
TemplateFields. Upon editing, I want to validate what the user enters
against one of those invisible columns. How do I accomplish this?
The code below that I attempted just returns an empty string when I
try to retrieve the invisible column data:

Any help would be greatly appreciated.

Do you have an example of how to implement the display:none CSS rule?
I attempted it yesterday and I didn't see any difference; the columns
were still visible.

Mel
(Using Visual Studio 2005, Asp.net 2.0, Visual Basic, WinXP Pro SP2)
 
Mel,

It looks like your three column are the keys for the grid - you could
utilize built in functionality - DataKeyNames property (comma separated) -
and do not have to create columns for them.
then on the postback you can use DataKeys[e.RowIndex] - it will return your
three values

Mel said:
I have 10 columns total. 3 of them are invisible. The rest are read-
only BoundFields, 3 of which are editable fields using
TemplateFields. Upon editing, I want to validate what the user enters
against one of those invisible columns. How do I accomplish this?
The code below that I attempted just returns an empty string when I
try to retrieve the invisible column data:

Any help would be greatly appreciated.

Okay cool. So now I can retrieve the 3 invisible fields using
DataKeys but how do I retrieve the contents of a Template field text
box (txtLength)? I tried FindControl but it always returns nothing,
maybe I'm using it wrong? The GridView control is in a table which is
on the Content1 section.
 
It looks like your three column are the keys for the grid - you could
utilize built in functionality - DataKeyNames property (comma separated) -
and do not have to create columns for them.
then on the postback you can use DataKeys[e.RowIndex] - it will return your
three values

Okay cool. So now I can retrieve the 3 invisible fields using
DataKeys but how do I retrieve the contents of a Template field text
box (txtLength)? I tried FindControl but it always returns nothing,
maybe I'm using it wrong? The GridView control is in a table which is
on the Content1 section.

I figured it out. THANKS to everyone for your help! I explained what
I did to solve the problem below in case anyone else is interested.

Instead of attempting to retrieve Invisible column data (which doesn't
work upon PostBack) I removed the columns from the DataView and I used
the DataKeys property instead:
gvParts.DataKeys(e.RowIndex).Item("StretchOut")
gvParts.DataKeys(e.RowIndex).Item("NumBends")
gvParts.DataKeys(e.RowIndex).Item("SN")

To retrieve a template field in my GridView control I used the
FindControl method:
Dim txtLengthBox As TextBox =
gvParts.Rows(e.RowIndex).Cells(7).FindControl("txtLength")

The Entire Code is here:
Protected Sub gvParts_RowUpdating(ByVal sender As Object, ByVal e
As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles
gvParts.RowUpdating
Dim txtLengthBox As TextBox =
gvParts.Rows(e.RowIndex).Cells(7).FindControl("txtLength")
Dim CusVal As CustomValidator =
gvParts.Rows(e.RowIndex).Cells(7).FindControl("cvLength")
If Trim(txtLengthBox.Text) <> "120" And
gvParts.DataKeys(e.RowIndex).Item("StretchOut") = "48" And
gvParts.DataKeys(e.RowIndex).Item("NumBends") = "0" Then
'Do not allow the user to change the length of a sheet of
material. Sheets are always 120 inches in length.
CusVal.IsValid = False
txtLengthBox.Text = e.OldValues("Length")
e.NewValues("Length") = e.OldValues("Length")
Else
End If
End Sub
 
<asp:GridView ID="View_Applicants" runat="server"
AutoGenerateColumns="False" CellPadding="4" Font-Size="12pt"
ForeColor="#333333" GridLines="None" Width="360px">
<Columns>
<asp:BoundField DataField="Applicant_LName"
HeaderText="Last Name" />
<asp:BoundField DataField="Applicant_FName"
HeaderText="First Name" />
<asp:BoundField DataField="Applicant_Email"
HeaderText="Email" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True"
ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White"
HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True"
ForeColor="#333333" />
<HeaderStyle BackColor="#FF8000" Font-Bold="True"
ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775"
/>
</asp:GridView>
 
Back
Top