Hi,
I am dumping the contents of the rad grid into a data table and am trying to find a control that is inside the item template of a grid template column without knowing what he control name is.
I am looping through all the columns in the grid and based on the data type, performing some custom formatting before inserting the row into the data table.
My question is, if the column is a grid template column, how can I find the control that is inside the <Item Template> without actually knowing the name.
Below is the code I am using to loop through the grid.
Thanks for your assistance.
Tracy
I am dumping the contents of the rad grid into a data table and am trying to find a control that is inside the item template of a grid template column without knowing what he control name is.
I am looping through all the columns in the grid and based on the data type, performing some custom formatting before inserting the row into the data table.
My question is, if the column is a grid template column, how can I find the control that is inside the <Item Template> without actually knowing the name.
Below is the code I am using to loop through the grid.
Dim dr As DataRow
For Each dataItem As GridDataItem In Me.rgvMainGrid.MasterTableView.Items
dr = exportTable.NewRow
For Each column As GridColumn In Me.rgvMainGrid.MasterTableView.Columns
If column.Display = True Then
Select Case column.ColumnType
Case "GridBoundColumn", "GridDropDownColumn", "GridDateTimeColumn", "GridNumericColumn", "GridCalculatedColumn"
strFields = strFields + IIf(strFields = Nothing, "", ",") + column.UniqueName.ToString + "," + column.HeaderText.ToString
Select Case column.DataType.ToString
Case "System.String"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = ""
Else
dr(column.UniqueName) = "'" + dataItem(column.UniqueName).Text.ToString
End If
Case "System.Decimal", "System.Double", "System.Single"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = FormatNumber(dataItem(column.UniqueName).Text.ToString, 2, TriState.False, TriState.False, TriState.False)
End If
Case "System.Int16", "System.Int32", "System.Int64", "System.Single"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = FormatNumber(dataItem(column.UniqueName).Text.ToString, 0, TriState.False, TriState.False, TriState.False)
End If
Case "System.DateTime"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = ""
Else
dr(column.UniqueName) = dataItem(column.UniqueName).Text.ToString
End If
End Select
Case "GridTemplateColumn"
Case Else
'Do Nothing
End Select
End If
Next
exportTable.Rows.Add(dr)
Next
Thanks for your assistance.
Tracy
9 Answers, 1 is accepted
0
Princy
Top achievements
Rank 2
answered on 21 Sep 2013, 05:15 AM
Hi Tracy,
Please try the following code snippet to loop through the GridTemplate Columns and access its values.
C#:
Thanks,
Princy
Please try the following code snippet to loop through the GridTemplate Columns and access its values.
C#:
Protected
Sub
RadGrid1_ItemDataBound1(sender
As
Object
, e
As
GridItemEventArgs)
If
TypeOf
e.Item
Is
GridDataItem
Then
Dim
item
As
GridDataItem =
DirectCast
(e.Item, GridDataItem)
For
Each
col
As
GridColumn
In
RadGrid1.Columns
If
TypeOf
col
Is
GridBoundColumn
Then
Dim
v
As
String
= item(col.UniqueName).Text
End
If
If
TypeOf
col
Is
GridTemplateColumn
Then
' get the value in GridTemplateColumn
Dim
QtyOrd
As
String
= DataBinder.Eval(item.DataItem,
DirectCast
(col, Telerik.Web.UI.GridTemplateColumn).DataField).ToString()
End
If
Next
End
If
End
Sub
Thanks,
Princy
0
Tracy
Top achievements
Rank 1
answered on 21 Sep 2013, 03:24 PM
Hi Princy,
Thank you for your response, but I am looking to grab the information for the item template within the grid template column.
For example, if I have a template column defined like the following;
Then what I would like to do is retrieve the information for the control within the <ItemTemplate>. In this case it would be the asp:checkbox , chkActive. I would then like to retrieve the unique name (chkActive) control type (checkbox) and value("true") without actually knowing then name of the control.
Also, I need to be able to do this on a button click that is outside the grid so I need to be able to do this outside of any grid events.
Thank You
Tracy
Thank you for your response, but I am looking to grab the information for the item template within the grid template column.
For example, if I have a template column defined like the following;
<
telerik:GridTemplateColumn
DataField
=
"ActiveFlag"
UniqueName
=
"gtcActive"
HeaderText
=
"Active?"
HeaderStyle-Width
=
"85px"
SortExpression
=
"ActiveFlag"
FilterControlWidth
=
"65px"
FilterImageUrl="<%$ Resources:Images,FilterGray16%>" ItemStyle-HorizontalAlign="Center" GroupByExpression="ActiveFlag Group By ActiveFlag" >
<
ItemTemplate
> <
asp:CheckBox
ID
=
"chkActive"
runat
=
"server"
AutoPostBack
=
"true"
Checked='<%# Bind("ActiveFlag") %>' OnCheckedChanged="chkActive_OnCheckChanged" /></
ItemTemplate
>
<
EditItemTemplate
> <
asp:CheckBox
ID
=
"chkEditActive"
runat
=
"server"
AutoPostBack
=
"true"
Checked='<%# Bind("ActiveFlag") %>'/></
EditItemTemplate
>
<
InsertItemTemplate
><
asp:CheckBox
ID
=
"chkInsertActive"
runat
=
"server"
AutoPostBack
=
"true"
Checked
=
'true'
/></
InsertItemTemplate
>
</
telerik:GridTemplateColumn
>
Also, I need to be able to do this on a button click that is outside the grid so I need to be able to do this outside of any grid events.
Thank You
Tracy
0
Princy
Top achievements
Rank 2
answered on 23 Sep 2013, 08:36 AM
Hi Tracy,
Please try the following code snippet to achieve your required scenario.
ASPX:
C#:
Thanks,
Princy
Please try the following code snippet to achieve your required scenario.
ASPX:
<
telerik:GridTemplateColumn
DataField
=
"IsTrue"
UniqueName
=
"IsTrue"
HeaderText
=
"IsTrue?"
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkActive"
runat
=
"server"
AutoPostBack
=
"true"
Checked='<%# Bind("IsTrue") %>'/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
. . . . .
<
asp:Button
ID
=
"Button1"
runat
=
"server"
Text
=
"Button"
OnClick
=
"Button1_Click"
/>
C#:
protected
void
Button1_Click(
object
sender, EventArgs e)
{
foreach
(GridColumn column
in
RadGrid1.Columns)
{
if
(column.GetType().Name ==
"GridTemplateColumn"
)
{
foreach
(GridDataItem item
in
RadGrid1.MasterTableView.Items)
{
foreach
(Control control
in
item[
"IsTrue"
].Controls)
{
string
ColType = control.GetType().Name;
string
Id = control.ID;
if
(ColType.Equals(
"CheckBox"
))
{
string
value = ((CheckBox)(control)).Checked.ToString();
}
}
}
}
}
}
Thanks,
Princy
0
Tracy
Top achievements
Rank 1
answered on 24 Sep 2013, 01:12 AM
Thanks Princy that worked perfectly.
0
Tracy
Top achievements
Rank 1
answered on 24 Sep 2013, 01:56 AM
Hi Princy,
I spoke too soon in my previous response.
This line
In my code I start with looping through all items(rows) in the grid and then for each item I loop through the columns and write the information to the data table.
See my code below.
Thanks
Tracy
I spoke too soon in my previous response.
This line
foreach
(GridDataItem item
in
RadGrid1.MasterTableView.Items)
loops all rows in the grid. I need to be able to pull the information for the current row only.In my code I start with looping through all items(rows) in the grid and then for each item I loop through the columns and write the information to the data table.
See my code below.
Thanks
Tracy
'Add Rows To Export Table
Dim dr As DataRow
For Each dataItem As GridDataItem In rgvGrid.MasterTableView.Items
dr = exportTable.NewRow
For Each column As GridColumn In rgvGrid.MasterTableView.Columns
If column.Display = True Then
Select Case column.ColumnType
Case "GridBoundColumn", "GridDropDownColumn", "GridDateTimeColumn", "GridNumericColumn", "GridCalculatedColumn"
' strFields = strFields + IIf(strFields = Nothing, "", ",") + column.UniqueName.ToString + "," + column.HeaderText.ToString
Select Case column.DataType.ToString
Case "System.String"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = ""
Else
dr(column.UniqueName) = "'" + dataItem(column.UniqueName).Text.ToString
End If
Case "System.Decimal", "System.Double", "System.Single"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = FormatNumber(dataItem(column.UniqueName).Text.ToString, 2, TriState.False, TriState.False, TriState.False)
End If
Case "System.Int16", "System.Int32", "System.Int64", "System.Single"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = FormatNumber(dataItem(column.UniqueName).Text.ToString, 0, TriState.False, TriState.False, TriState.False)
End If
Case "System.DateTime"
If dataItem(column.UniqueName).Text.ToString = " " Then
dr(column.UniqueName) = ""
Else
dr(column.UniqueName) = dataItem(column.UniqueName).Text.ToString
End If
End Select
Case "GridTemplateColumn"
'Find the control in the <
Item
Template>
'then get the column unique name and value
Case Else
'Do Nothing
End Select
End If
Next
exportTable.Rows.Add(dr)
Next
0
Princy
Top achievements
Rank 2
answered on 24 Sep 2013, 09:41 AM
Hi Tracy,
Please try the below code snippet.
VB:
Thanks,
Princy
Please try the below code snippet.
VB:
If
True
Then
Dim
dr
As
DataRow =
Nothing
For
Each
dataItem
As
GridDataItem
In
rgvGrid.MasterTableView.Items
dr = exportTable.NewRow
For
Each
column
As
GridColumn
In
rgvGrid.MasterTableView.Columns
If
column.Display =
True
Then
Select
Case
column.ColumnType
Case
"GridBoundColumn"
,
"GridDropDownColumn"
,
"GridDateTimeColumn"
,
"GridNumericColumn"
,
"GridCalculatedColumn"
'strFields = strFields + IIf(strFields = Nothing, "", ",") + column.UniqueName.ToString + "," + column.HeaderText.ToString
Select
Case
column.DataType.ToString
Case
"System.String"
If
dataItem(column.UniqueName).Text.ToString =
" "
Then
dr(column.UniqueName) =
""
Else
dr(column.UniqueName) =
"'"
+ dataItem(column.UniqueName).Text.ToString
End
If
Exit
Select
Case
"System.Decimal"
,
"System.Double"
,
"System.Single"
If
dataItem(column.UniqueName).Text.ToString =
" "
Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = Strings.FormatNumber(dataItem(column.UniqueName).Text.ToString, 2, TriState.[
False
], TriState.[
False
], TriState.[
False
])
End
If
Exit
Select
Case
"System.Int16"
,
"System.Int32"
,
"System.Int64"
,
"System.Single"
If
dataItem(column.UniqueName).Text.ToString =
" "
Then
dr(column.UniqueName) = 0
Else
dr(column.UniqueName) = Strings.FormatNumber(dataItem(column.UniqueName).Text.ToString, 0, TriState.[
False
], TriState.[
False
], TriState.[
False
])
End
If
Exit
Select
Case
"System.DateTime"
If
dataItem(column.UniqueName).Text.ToString =
" "
Then
dr(column.UniqueName) =
""
Else
dr(column.UniqueName) = dataItem(column.UniqueName).Text.ToString
End
If
Exit
Select
End
Select
Exit
Select
'Find the control in the <Item Template>
Case
"GridTemplateColumn"
For
Each
control
As
Control
In
dataItem(
"ActiveFlag"
).Controls
Dim
ColType
As
String
= control.[
GetType
]().Name
Dim
Id
As
String
= control.ID
If
ColType.Equals(
"CheckBox"
)
Then
Dim
value
As
String
=
DirectCast
(control, CheckBox).Checked.ToString()
End
If
Next
Exit
Select
Case
Else
Exit
Select
'Do Nothing
End
Select
End
If
Next
exportTable.Rows.Add(dr)
Next
End
If
Thanks,
Princy
0
Tracy
Top achievements
Rank 1
answered on 24 Sep 2013, 02:01 PM
Hi Princy,
You code below assumes I know the column name. I am trying to get to the control in the item template without knowing the name. I would like to put this code in module so that I can use it on any grid. Is there a way to reference the control without knowing the name.
Thanks
Tracy
You code below assumes I know the column name. I am trying to get to the control in the item template without knowing the name. I would like to put this code in module so that I can use it on any grid. Is there a way to reference the control without knowing the name.
Thanks
Tracy
0
Accepted
Hello Tracy,
Could you please try to add the code snippet bellow in your "GridTemplateColumn" switch case and see if it fulfills your requirements for retrieving the value. I have tested this with several scenarios and it is getting the value without any issues:
Hope that helps.
Konstantin Dikov
Telerik
Could you please try to add the code snippet bellow in your "GridTemplateColumn" switch case and see if it fulfills your requirements for retrieving the value. I have tested this with several scenarios and it is getting the value without any issues:
For
Each
control
As
Control
In
dataItem(column.UniqueName).Controls
Dim
ColType
As
String
= control.[
GetType
]().Name
Dim
Id
As
String
= control.ID
Dim
value
As
String
=
""
If
ColType.Equals(
"CheckBox"
)
Then
value =
DirectCast
(control, CheckBox).Checked.ToString()
ElseIf
control.ToString() <>
"System.Web.UI.LiteralControl"
Then
value =
DirectCast
(control, ITextControl).Text
End
If
Next
Hope that helps.
Regards,
Konstantin Dikov
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
0
Tracy
Top achievements
Rank 1
answered on 26 Sep 2013, 03:47 PM
Thank you Konstantin that was what I needed.
Tracy
Tracy