GridView - Retrieve invisible column information

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.
 
D

David Wier

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.
 
M

Mel

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.
 
E

Eliyahu Goldin

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.
 
G

Guest

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
 
M

Mel

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)
 
E

Eliyahu Goldin

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)
 
M

Mel

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.
 
M

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

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
 
H

Hardeep Kaur

<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>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top