How do I loop through rows in a EditItemTemplate server side?

4 posts, 1 answers
  1. Steve
    Steve avatar
    84 posts
    Member since:
    Aug 2013

    Posted 05 Jan 2014 Link to this post

    I have a grid that has a GridTemplateColumn, with an EditItemTemplate inside. Inside the EditItemTemplate is a RadNumericTextBox. I'm trying to loop through the rows in the grid server side, outside the normal RadGrid events. I have a button that when clicked sends me server side and in that event I need to loop through and grab the values from all the rows.



    I have no problem grabbing the DataKeyValue for the row, it's just the value of txtQuantity I am unable to get.


    Here is my ASCX:

    <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" DataSourceID="Products"
        Skin="Forest" GridLines="None" OnItemDataBound="RadGrid1_ItemDataBound" Width="50%">
        <ClientSettings>
             <Scrolling AllowScroll="True" UseStaticHeaders="True" SaveScrollPosition="true" ></Scrolling>
        </ClientSettings>
        <MasterTableView ShowFooter="true" AutoGenerateColumns="False"
            CurrentResetPageIndexAction="SetPageIndexToFirst" DataKeyNames="ID" DataSourceID="Products"
            Dir="LTR" Frame="Border" TableLayout="Auto" EditMode="Batch" BatchEditingSettings-OpenEditingEvent="Click" CommandItemDisplay="None">
            <Columns>
                <telerik:GridBoundColumn DataField="ID" DataType="System.Int32"  ReadOnly="True" UniqueName="ID" />
                <telerik:GridBoundColumn DataField="ProductName" ReadOnly="true" HeaderText="Product" UniqueName="ProductName" />
                 
                <telerik:GridTemplateColumn DataField="Quantity" UniqueName="Quantity" HeaderText="Quantity" DataType="System.Int32">                               
                    <ItemTemplate>
                            <%# Eval("Quantity")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <telerik:RadNumericTextBox ID="txtQuantity" runat="server" Width="40px" DataType="System.Int32"
                             NumberFormat-DecimalDigits="0" Skin="Forest">
                            <ClientEvents OnBlur="Blur" OnFocus="Focus" />
                        </telerik:RadNumericTextBox>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <telerik:RadNumericTextBox ID="TextBox2" runat="server" Width="40px" DataType="System.Int32" NumberFormat-DecimalDigits="0" Skin="Forest" ReadOnly="True">
                            <ClientEvents OnLoad="Load" />
                        </telerik:RadNumericTextBox>
                    </FooterTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        </MasterTableView>
        <PagerStyle Mode="NextPrevAndNumeric" />
    </telerik:RadGrid>




    Here is my Server side:



    Protected Sub btnProcess_Click(sender As Object, e As EventArgs)
        Try
            For Each row As GridDataItem In RadGrid1.MasterTableView.Items
                Dim key As String = row.GetDataKeyValue("ID")
                Dim qty As RadNumericTextBox = DirectCast(row("Quantity").FindControl("txtQuantity"), RadNumericTextBox)
     
            Next
            
        Catch ex As Exception
            Response.Write(ex.ToString)
        End Try
    End Sub




  2. Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 05 Jan 2014 Link to this post

    Hi Steve,

    I'm not clear about your requirement, if you want to trigger the saving of the changes from an outer button. This can be achieved by obtaining a reference to the batch editing manager of the grid and calling saveChanges as follows:

    ASPX:

    <
    telerik:RadButton AutoPostBack="false" Text="SaveChanges" ID="SaveChangesButton" runat="server" OnClientClicked="SaveChangesInGrid"></telerik:RadButton>

    JavaScript:
    function SaveChangesInGrid(sender,args) {
                var grid = $find('<%=RadGrid1.ClientID%>');
                grid.get_batchEditingManager().saveChanges(grid.get_masterTableView());
            }

    Please Note, When EditMode is set to Batch an editor is created for each column and is only shown when a user clicks on a certain cell to edit it's content. Later when the cell value is changed a client side object is created which reflect the changes. If another cell from the same column is opened for editing the editor is being repopulated in order to expose the value from that cell. This logic is being executed on the client using JavaScript. The values are passed to the server once the Save Changes button is pressed.

    Thanks,
    Princy

  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Steve
    Steve avatar
    84 posts
    Member since:
    Aug 2013

    Posted 06 Jan 2014 Link to this post

    I'm saving the data to a different table, with additional information from other controls on the page. That is why I need to loop through each row independently of what the grid can do to save. So, I need to save the data myself. Only one cell per row is edited. All others are read only.
  5. Answer
    Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 07 Jan 2014 Link to this post

    Hi Steve,

    If you are trying to access the changing value of Quantity in RadNumericTextBox, its not possible from ServerSide but from ClientSide in the OnBatchEditCellValueChanged as shown below. As said in my previous post the values are passed to the server only when the Save Changes button is pressed.

    ASPX:
    <ClientSettings>
        <ClientEvents OnBatchEditCellValueChanged="CellValueChanged" />
    </ClientSettings>

    JS:
    <script type="text/javascript">
        function CellValueChanged(sender, args) {  
            var row = args.get_row();
            var rowIndex = row.rowIndex;
            var columnName = args.get_columnUniqueName();
            var cell = args.get_cell();
            var oldValue = args.get_cellValue();
            var newValue = args.get_editorValue();    
        }
    </script>

    On the OnClick event of the Button, you can access the values in the view mode using GridDataItem, in this we cant access Edit items. To access the value of the GridTemplateColumn in ItemTemplate, please bind the DataField to a label as follows:

    ASPX:
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Quantity")%>'></asp:Label>
    </ItemTemplate>

    C#:
    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridDataItem items in RadGrid1.MasterTableView.Items)
        {
            string id = items.GetDataKeyValue("ID").ToString();
            Label lbl = (Label)items.FindControl("Label1");
            string quantity = lbl.Text;           
        }
    }

    Thanks,
    Princy
Back to Top