Make one cell in gridview invisible?

J

Jo

Hi all,

I have a gridview displaying a dataset and some buttons. When a certain
cell of this datasetrow is empty, I want a button in that row to be
visible, otherwise no button should be shown in that row.

I'm trying to make this work all day, but it's not going to work.

I tried this in the rowCreated event. I am able to find the right row
and cell in this row (as a datarow), but now the right gridview
row-cell should be made visible.

This is what I have right now (C#):

protected void supplierFilesGrid_RowCreated(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drView = (DataRowView)e.Row.DataItem;
DataRow drRow = drView.Row;

if (drRow[2].ToString() == "NEW")
{
int i = e.Row.RowIndex; //
this works fine, after this I get an error:
//grid.Rows.Cells[1].Visible = false; //
argumentOutOfRangeException...
(sender as GridView).Rows.Cells[1].Visible =
false;
}
}
}

Has anyone a suggestion how to make this work?

Thanks in advance!

Regards,
Jo
 
S

sirfunusa

Here is a snippet of code I have in this event to get you started.

e.Item.Cells.Item(4).ToolTip = e.Item.Cells.Item(5).Text
 
J

Jo

Hi,
Thanks for your quick reply! You gave me the right hint to continue
this 'problem'.

A gridview doesn't have an ItemDataBound event, I used the RowDataBound
event and it works! But not completely as hoped: the data/buttons in
the columns behind the 'Invisible' column move 1 column to the left,
filling the space of the 'invisible' column. That's not what I need,
this column should be left empty, 'not replaced'...
That's the only issue left now. Any solution to that?

protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drView = (DataRowView)e.Row.DataItem;
DataRow drRow = drView.Row;

if (drRow[6].ToString() != "")
{
int i = e.Row.RowIndex;
e.Row.Cells[7].Visible = false;
}
}
}

Regards,
Jo
 
J

Jan Hyde

"Jo" <[email protected]>'s wild thoughts were
released on 7 Apr 2006 00:49:27 -0700 bearing the following
fruit:
Hi,
Thanks for your quick reply! You gave me the right hint to continue
this 'problem'.

A gridview doesn't have an ItemDataBound event, I used the RowDataBound
event and it works! But not completely as hoped: the data/buttons in
the columns behind the 'Invisible' column move 1 column to the left,
filling the space of the 'invisible' column. That's not what I need,
this column should be left empty, 'not replaced'...
That's the only issue left now. Any solution to that?

You don't want to remove the cell, only it's contents.

J
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drView = (DataRowView)e.Row.DataItem;
DataRow drRow = drView.Row;

if (drRow[6].ToString() != "")
{
int i = e.Row.RowIndex;
e.Row.Cells[7].Visible = false;
}
}
}

Regards,
Jo


Jan Hyde (VB MVP)
 
J

Jo

Hi,
You don't want to remove the cell, only it's contents.

I thought I wasn't removing anything, just hiding
("e.Row.Cells[7].Visible = false"),
still the content of remaining cells in that row is taking the place of
the content of the 'invisible' cell.

So, maybe you can be more clear about this?

Thank you!
Jo
 
J

Jan Hyde

"Jo" <[email protected]>'s wild thoughts were
released on 7 Apr 2006 02:30:49 -0700 bearing the following
fruit:
Hi,
You don't want to remove the cell, only it's contents.

I thought I wasn't removing anything, just hiding
("e.Row.Cells[7].Visible = false"),
still the content of remaining cells in that row is taking the place of
the content of the 'invisible' cell.

So, maybe you can be more clear about this?

'I want a button in that row to be visible, otherwise no
button should be shown in that row'

So change the visible propery of the button to false.



Jan Hyde (VB MVP)
 
J

Jo

Hi,
So change the visible propery of the button to false.

First, I didn't know how to do that, but I've tried this code (see
below), and I got an ArgumentOutOfRangeException!
I guess that the row which gives the GridViewRowEventArgs haven't been
created in the GridView at that time, the row before this one does exit
in de Gridview, the current one not...
Maybe I have to try to do this in the rowcreated_event???

protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)

{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drView = (DataRowView)e.Row.DataItem;
DataRow drRow = drView.Row;

if (drRow[6].ToString() != "")
{
int i = e.Row.RowIndex;
//e.Row.Cells[7].Visible = false; REPLACED BY:
grid.Rows.Controls[7].Visible = false; ////////
Gives an ArgumentOutOfRangeException!
}
}
}
 
J

Jo

I got the same problem in the rowcreated_event...

And tried "e.Row.Cells.RemoveAt(7);" in stead of
"e.Row.Cells[7].Visible = false", but that gives (visually) the same
results
That's something I can't explain: removing and making invisible isn't
the same!

I'm going of to enjoy my weekend. Hopefully someone can give me a
straight answer and a solution to my 'problem'.

Enjoy!
Jo
 
J

Jo

Thanks for your support!
Now it's working:

e.Row.Cells[7].Controls[1].Visible = false;

Thank you!
Jo
 

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

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,900
Latest member
Nell636132

Latest Threads

Top