This is a migrated thread and some comments may be shown as answers.

Double click to edit and insert new row into radgrid

1 Answer 168 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Laxmi
Top achievements
Rank 1
Laxmi asked on 05 Feb 2013, 06:26 AM

 Radgrid is not refreshing at client side but at the server side radgrid contains Newly added row ,
I added a keydown event for the textbox "txtPartDescription" 
  in the Keydownevent i handled Tab key  ,  i called Radajaxmanager_ajaxRequesr("Newrow") to insert new row into datasource and i assigned data source to radgrid . but radgrid is not refreshing at the browser it showing old data and also client event s are not working after binding .

Thanks in advance .
   Please suggest any other approach to handle this  .
  please check the below code  

        protected void RadAjaxManager1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e)
        {
            if (e.Argument == "NewRow")
            {
                if (Session["dtOld"] != null)
                {
                    DataTable dt = (DataTable)Session["dtOld"];
                    DataRow dr = dt.NewRow();
                    dt.Rows.Add(dr);
                    grdParts.DataSource = dt;
                    grdParts.MasterTableView.Rebind();
                    //    grdParts.DataBind();
                    Session["dtOld"] = dt;

                }
            }
            else
            {

                DataTable dtRecords = new DataTable();
                dtRecords.Rows.Clear();
                foreach (GridColumn col in grdParts.Columns)
                {
                    DataColumn colString = new DataColumn(col.UniqueName);
                    dtRecords.Columns.Add(colString);

                }
                foreach (GridDataItem row in grdParts.MasterTableView.Items) // loops through each rows in RadGrid
                {
                    TextBox txt = (TextBox)row.FindControl("txtPartNumber");
                    string v = txt.Text;
                    DataRow dr = dtRecords.NewRow();
                    foreach (GridColumn col in grdParts.Columns) //loops through each column in RadGrid
                        dr[col.UniqueName] = row[col.UniqueName].Text;
                    dtRecords.Rows.Add(dr);
                }
                Session["save"] = dtRecords;
            }
        }
  <script type="text/javascript">
            var editedCell;
            var arrayIndex = 0;
            var editedItemsIds = [];
            function RowCreated(sender, eventArgs) {
                alert("row created");
                var dataItem = eventArgs.get_gridDataItem();

                for (var i = 0; i < dataItem.get_element().cells.length; i++) {
                    var cell = dataItem.get_element().cells[i];
                    if (cell) {
                        $addHandler(cell, "dblclick", Function.createDelegate(cell, ShowColumnEditor));
                    }
                }
            }
            function RowClick(sender, eventArgs) {
            
                if (editedCell) {
             
                    if ((eventArgs.get_domEvent().target.tagName == "TD") ||
                        (eventArgs.get_domEvent().target.tagName == "SPAN" && !eventArgs.get_domEvent().target.className.startsWith("rfd"))) {
                        alert("up");
                        UpdateValues(sender);
                        editedCell = false;
                    }
                }


            }
            function UpdateValues(grid) {
                alert("up");
               
                var tHeadElement = grid.get_element().getElementsByTagName("thead")[0];

                var headerRow = tHeadElement.getElementsByTagName("tr")[0];

                var colName = grid.get_masterTableView().getColumnUniqueNameByCellIndex(headerRow, editedCell.cellIndex);

              
                switch (colName) {
                    case "PartNumber":
                        HideEditor(editedCell, "textbox");
                        break;
                    case "PartDescription":
                        HideEditor(editedCell, "textbox");
                        break;

                    default:
                        break;
                }
            }
            function HideEditor(editCell, editorType) {
            
                var lbl = editCell.getElementsByTagName("span")[0];



                switch (editorType) {
                    case "textbox":
                        var txtBox = editCell.getElementsByTagName("input")[0];
                        if (lbl.innerHTML != txtBox.value) {
                            lbl.innerHTML = txtBox.value;
                            editCell.style.border = "1px dashed";

                        }
                        txtBox.style.display = "none";


                        break;
                    default:
                        break;
                }
                lbl.style.display = "inline";
            }
            function RowDestroying(sender, eventArgs) {
            
                var row = eventArgs.get_gridDataItem().get_element();
                var cells = row.cells;
                for (var j = 0, len = cells.length; j < len; j++) {
                    var cell = cells[j];
                    if (cell) {
                        $clearHandlers(cell);
                    }
                }

            }
            function ShowColumnEditor() {
                editedCell = this;

             
                var cellText = this.getElementsByTagName("span")[0];
                cellText.style.display = "none";

                var colEditor = this.getElementsByTagName("input")[0];
           
                colEditor.style.display = "";
                colEditor.focus();
            }
            function ProcessChanges() {
            

                $find("<%=RadAjaxManager1.ClientID%>").ajaxRequest();
        
                return false;
     

            }
            function KeyPress(event, indx) {

                if (event.keyCode == 9) {
                    var grid = $find("<%=grdParts.ClientID%>");
                    var MasterTable = grid.get_masterTableView();
                    var Rows = MasterTable.get_dataItems();
                    alert(Rows.length);
                    $find("<%=RadAjaxManager1.ClientID%>").ajaxRequest("NewRow");

                    $find("<%= grdParts.ClientID %>").get_masterTableView().rebind();
                    var r = $find("<%= grdParts.ClientID %>").get_masterTableView().get_dataItems();
                    alert(r.length);
                }

            }
       
        </script>
<telerik:RadGrid runat="server" ID="grdParts" Width="300" AutoGenerateColumns="false"
                    AllowAutomaticInserts="true" >
                    <MasterTableView EditMode="InPlace" CommandItemDisplay="Bottom" >
                       <CommandItemTemplate>
                            <asp:Button ID="Button1" Text="Add new item" runat="server"  CommandName="InitInsert" OnClick="btnaddnew_Click">
                            </asp:Button>
                        </CommandItemTemplate>
                        <Columns>
                            <telerik:GridTemplateColumn HeaderText="PartNumber" UniqueName="PartNumber">
                                <ItemTemplate>
                                    <asp:Label runat="server" ID="lblPartNumber" Height="25" Text='<%#Eval("PartNumber")%>'></asp:Label>
                                    <asp:TextBox runat="server" ID="txtPartNumber" Height="25" Text='<%#Eval("PartNumber")%>'
                                        Style="display: none" ></asp:TextBox>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="PartDescription" UniqueName="PartDescription">
                                <ItemTemplate>
                                    <asp:Label runat="server" ID="lblPartDescription" Height="25" Text='<%#Eval("PartDescription")%>'></asp:Label>
                                    <asp:TextBox runat="server" ID="txtPartDescription" Height="25" Text='<%#Eval("PartDescription")%>'
                                        Style="display: none"></asp:TextBox>
                                </ItemTemplate>
                            </telerik:GridTemplateColumn>
                        </Columns>
                    </MasterTableView>
                    <ClientSettings>
                        <ClientEvents OnRowCreated="RowCreated" OnRowClick="RowClick" OnRowDestroying="RowDestroying">
                        </ClientEvents>
                    </ClientSettings>
                </telerik:RadGrid>

1 Answer, 1 is accepted

Sort by
0
Angel Petrov
Telerik team
answered on 07 Feb 2013, 06:12 PM
Hello Laxmi,

It is hard to determine what is causing this behavior as the code provided is not runnable. I did not see where are you binding the grid initially. Could you please try implementing advanced data-binding and move the logic for adding a new row in the NeedDataSource event handler?
As for the client events issue please confirm that you do not have a JavaScript error on the page.
It would be best if you could provide the whole markup and code-behind facilitating us to give you a more straight to the point answer/solution.

Regards,
Angel Petrov
the Telerik team
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 their blog feed now.
Tags
Grid
Asked by
Laxmi
Top achievements
Rank 1
Answers by
Angel Petrov
Telerik team
Share this question
or