This might be a little hard to explain but i'm going to do my best because i'm stuck.
I've programatically created an EditTemplate Column using an IBindableTemplate.
The call looks like:
GridTemplateColumn col =
new
GridTemplateColumn();
col.ItemTemplate =
new
ItemLabel(column);
col.EditItemTemplate =
new
EditRadNumTextbox(grid, column);
I could create an insert template but the problem im having is even if i do have an insert template I'm not sure how to find and hide the labels so i end up with a labels in the left column with hidden controls in the right column in the edit form.
How do I find the label in edit/insert mode with in an IBindableTemplate class?
it appears i have two places i can look for it in
public void InstantiateIn(Control container)
or in the control databinding, but in insertmode there's nothing to bind to so i assume i should be able to find the label in InstantiateIn?
Or is there a way to set GridTemplateColumn to not show the label ion insert?
Any help would be much appreciated.
8 Answers, 1 is accepted
Never mind, I figured it out.
Below is my solution, "column" is my data object that contains all the properties of our grid. I check when i want to hide on insert mode and set always hidden when its not supposed to be shown.
if
(column.SCSFC_DoNotDisplay || column.SCSFC_Hide_In_Edit_Mode || column.SCSFC_ReadOnly)
{
col.InsertVisiblityMode = GridColumnVisibilityMode.AlwaysHidden;
}
If you want to achieve this depending on a condition per individual record, you can determine whether the item is in edit or insert form:
http://www.telerik.com/help/aspnet-ajax/grid-distinguish-edit-insert-mode-on-itemcreated-itemdatabound.html
And hide the required cell:
( Section Accessing controls in edit/insert mode )
http://www.telerik.com/help/aspnet-ajax/grid-accessing-cells-and-rows.html
Similar to this:
Protected
Sub
RadGrid1_ItemCreated(sender
As
Object
, e
As
GridItemEventArgs)
If
TypeOf
e.Item
Is
IGridInsertItem
Then
Dim
cell
As
TableCell = TryCast(e.Item, GridEditableItem)(
"ColumnUniqueName"
)
cell.Parent.Visible =
False
End
If
End
Sub
Hope this helps.
Regards,
Eyup
Telerik
Eyup,
That actually wouldn't work for me because i am dynamically creating a grid based on the form and not at a record level. By using your suggestion we would end up having to do that on every form we use the radgrid and that would end up being about 50 files.
My solution ends up going in our grid generation class which then takes care of the insert display logic on every grid, so code is in one place only :)
Thanks for the suggestion though
Phil
I'm glad you've found a viable solution for your scenario. Since you mentioned "grid generation class", just please keep in mind that creating custom controls is beyond our support scope even if they are inherited directly from Telerik UI controls. If you happen to come across the need to implement something like this, you can use UserControls. Other than that, the logic seems fine.
Regards,
Eyup
Telerik
Well i guess im not really sure its technically considered a custom control since we're using all of telerik's samples in programatically generating a radgrid. Only thing we've done is organized telerik into a class and a method call that allows us to control what type of column control to load.
Everything starts with:
RadGrid grid = new RadGrid();
Then we just dynamically add columns with item/edit/insert templates as we go. As much as things are custom im not really sure its considered a custom control since we're using everything telerik provides and we're not creating any custom control objects?
Everything we've done is pretty much taken from the basic concepts of this links:
http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/defining-structure/creating-a-radgrid-programmatically
So forgive me if i'm a little concerned when someone mentions that my issue may not be supported when its in your documentation as a way to do things.
One last note, is i wasn't really looking for logic (i probably should have phrased my post better), i was looking for a feature that a telerik grid may or may not have that would allow me to hide labels in an insert template. If i know that the feature exists then i can programmatically turn it off/on in our grid. In the end it was the InsertVisiblityMode feature that allowed me to do what i wanted.
Thanks for your response
Programmatic creation of RadGrid is perfectly viable and supported. You can even change the structure of the grid dynamically:
http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/defining-structure/changing-the-grid-structure-dynamically-on-postback
What I meant was something like this:
public
class
ModifiedRadGrid : RadGrid { }
// custom internal logic
protected
void
Page_Load(
object
sender, EventArgs e)
{
ModifiedRadGrid modifiedGrid =
new
ModifiedRadGrid();
}
In addition to the InsertVisibilityMode property that you've found helpful in your scenario, I want to make sure that you are also aware of the DefaultInsertValue property:
<
telerik:GridBoundColumn
...
DefaultInsertValue
=
"Accept"
>
Please do not hesitate to turn to us if some questions or concerns arise.
Regards,
Eyup
Telerik
Thanks Eyup!
That actually will be a handy option we might someday implement when we need!
And we are definitely not creating a custom control, so that's good news.
I was thinking of someday creating a scaled down project as an example for people who want to create a totally data driven dynamic grid but it feels like we'd be giving away our secret sauce hehe. It would help our future support tickets though if we just had a simplified version of our grid.
Thanks again
It is perfectly understandable to keep your company logic and data private, however, if you decide to share a sample project built using a dummy source with our community, you can always create and submit a code-library:
http://www.telerik.com/support/code-library/aspnet-ajax/grid
Regards,
Eyup
Telerik