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) NextThanks 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 IfEnd SubThanks,
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 TableDim dr As DataRowFor 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)Next0
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) NextEnd IfThanks,
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 IfNextHope 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
