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

How to Keep Insert Form Open after commanditem event is used in RadGrid

3 Answers 324 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Chi Ming
Top achievements
Rank 1
Chi Ming asked on 14 Jun 2013, 02:11 PM
Hello everyone!

Tell me how to keep Insert Form Open after the commanditem event is used - check if username is not in the database so insert a new user in the database and close the form. Check If username is already in the database so keep the insert form open and change new username in the insert form. 

The InsertNewUser method is called in the CommandItem Event. 

private void InsertNewUser(GridItem gridItem)
    {
        //initizlize new object of User System
        User UserBLL = new User();
 
        //initizlize new setUser of User Info Model
        UserInfo setUserInfo = new UserInfo();
 
        //initizlize new object of PO User System Info
        POUserSystemInfo POUserSysBLL = new POUserSystemInfo();
 
        //initizlize new object of PO User Attribute Model
        POInfo setPOUserInfo = new POInfo();
 
 
        UserControl userControl = (UserControl)gridItem.FindControl(GridEditFormItem.EditFormUserControlID);
 
        RadTextBox txtfirstname = (userControl.FindControl("txtfirstname") as RadTextBox);
        RadTextBox txtlastname = (userControl.FindControl("txtlastname") as RadTextBox);
        RadTextBox txtusername = (userControl.FindControl("txtusername") as RadTextBox);
        RadTextBox txtemail = (userControl.FindControl("txtemail") as RadTextBox);
        RadMaskedTextBox txtPhone = (userControl.FindControl("txtPhone") as RadMaskedTextBox);
        RadMaskedTextBox txtExtension = (userControl.FindControl("txtExtension") as RadMaskedTextBox);
        RadMaskedTextBox txtfax = (userControl.FindControl("txtfax") as RadMaskedTextBox);
        RadTextBox txtjobtitle = (userControl.FindControl("txtjobtitle") as RadTextBox);
 
 
        RadTabStrip RadTabStrip1 = (userControl.FindControl("RadTabStrip1") as RadTabStrip);
        RadPageView RadPageView2 = (userControl.FindControl("RadPageView2") as RadPageView);
 
 
        setUserInfo.user_id = 0;
        setUserInfo.firstname = txtfirstname.Text;
        setUserInfo.lastname = txtlastname.Text;
        setUserInfo.sys_username = txtusername.Text;
        setUserInfo.jobtitle = txtjobtitle.Text;
        setUserInfo.designation = ' ';
        setUserInfo.phone = txtPhone.Text;
        setUserInfo.fax = txtfax.Text;
        setUserInfo.email = txtemail.Text;
        setUserInfo.update_date = DateTime.Now;
        setUserInfo.removed = false;
        setUserInfo.extension = txtExtension.Text;
        setUserInfo.update_date = DateTime.Now;
        setUserInfo.removed = false;
        setUserInfo.extension = txtExtension.Text;
 
        setUserInfo.update_by = 0;
 
 
        //Check if Username is not in the database.
        if (UserBLL.GetUser(txtusername.Text.Trim()) == null)
        {
            //Insert New Record to the table in the database
            int NewUserID = 0;
            NewUserID = UserBLL.RegisterUser(setUserInfo);
 
            if (NewUserID > 0)
            {
 
                //Clear ViewState and Refresh RadGrid Control
                ViewState["Users"] = null;
                rgUsersMain.Rebind();
 
                gridItem.OwnerTableView.IsItemInserted = false;
                Edit = true;
                EditItemIndex = rgUsersMain.Items.Count - 1;
                Session["IsNewUser"] = true;
                Session["rgNewUserID"] = NewUserID;
            }
        }
        else
        {
 
            //Keep Insert Form Open
 
            GridEditableItem edititem = (GridEditableItem)gridItem;
            gridItem.OwnerTableView.IsItemInserted = true;
            rgUsersMain.MasterTableView.InsertItem();
            //rgUsersMain.Rebind();
 
            RadWindowManager1.RadAlert("User Already Exists", 330, 180, "Server RadAlert", "", "");
        }
 
 
    }
                //Clear ViewState and Refresh RadGrid Control
                ViewState["Users"] = null;
                rgUsersMain.Rebind();
 
                gridItem.OwnerTableView.IsItemInserted = false;
                Edit = true;
                EditItemIndex = rgUsersMain.Items.Count - 1;
                Session["IsNewUser"] = true;
                Session["rgNewUserID"] = NewUserID;
            }
        }
        else
        {
 
            //Keep Insert Form Open
 
            GridEditableItem edititem = (GridEditableItem)gridItem;
            gridItem.OwnerTableView.IsItemInserted = true;
            rgUsersMain.MasterTableView.InsertItem();
            //rgUsersMain.Rebind();
 
            RadWindowManager1.RadAlert("User Already Exists", 330, 180, "Server RadAlert", "", "");
        }

3 Answers, 1 is accepted

Sort by
0
Kostadin
Telerik team
answered on 19 Jun 2013, 07:42 AM
Hi Chi Ming,

Could you please let me know where InsertNewUser method is being called? Basically you could check whether the user is already inserted and cancel the command and show an alert message. This way the insert form will remain opened. Check out the following code snippet.
protected void RadGrid1_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
   {
       if (e.CommandName == RadGrid.PerformInsertCommandName)
       {
           //check whether the user exist
           if (userExist)
           {
               e.Canceled = true;
               //show alert message
           }
           else
           {
               //proceed with inserting the new user.
           }
       }
   }

Kostadin
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
Chi Ming
Top achievements
Rank 1
answered on 19 Jun 2013, 02:47 PM
The InsertNewUser Method is being called in the if-conditional statement in the item-command event. Thank you for sending me information.

I need to ask you other question regarding edit form.  

Once it inserted a new user to the database, How does it change insert to edit in mode? I need to keep the EDIT form open even if new user is inserted into the database

1. Once "Add New User" button is selected in the web user control, it calls InsertNewuser() method and update a new user to the database. Once it is completed, it needs to change the insert to edit in the mode and keep the form open. 

protected void rgUsersMain_ItemCommand(object sender, GridCommandEventArgs e)
  {
 
      if (e.CommandName.Equals(RadGrid.PerformInsertCommandName))
      {
          try
          {
              InsertNewUser(e.Item);
              e.Canceled = true;
          }
          catch (Exception ex)
          {
              Logging.WriteLogToFile("Add New User", ex);
              Label lblError = new Label();
              lblError.Text = "Unable to insert new user. Reason: " + ex.Message;
              lblError.ForeColor = System.Drawing.Color.Red;
              rgUsersMain.Controls.Add(lblError);
          }
 
      }
      else if (e.CommandName.Equals(RadGrid.UpdateCommandName))
      {
          try
          {
              UpdateUser(e.Item);
              e.Canceled = true;
          }
          catch (Exception ex)
          {
              Logging.WriteLogToFile("Update User", ex);
              Label lblError = new Label();
              lblError.Text = "Unable to update user. Reason: " + ex.Message;
              lblError.ForeColor = System.Drawing.Color.Red;
              rgUsersMain.Controls.Add(lblError);
          }
      }
      else if (e.CommandName.Equals(RadGrid.DeleteCommandName))
      {
          try
          {
              DeleteUser(e.Item);
          }
          catch (Exception ex)
          {
              Logging.WriteLogToFile("Delete User", ex);
 
              Label lblError = new Label();
              lblError.Text = "Unable to delete user. Reason: " + ex.Message;
              lblError.ForeColor = System.Drawing.Color.Red;
              rgUsersMain.Controls.Add(lblError);
          }
      }
      else if (e.CommandName.Equals(RadGrid.CancelCommandName))
      {
          Session["CurrentRoleLocations"] = null;
          Session["rgUserID"] = null;
          ViewState["Users"] = null;
          rgUsersMain.Rebind();
 
      }
 
  }

2. Calling the InsertNewUser Method 

private void InsertNewUser(GridItem gridItem)
  {
      //initizlize new object of User System
      User UserBLL = new User();
 
      //initizlize new setUser of User Info Model
      UserInfo setUserInfo = new UserInfo();
 
      //initizlize new object of PO User System Info
      POUserSystemInfo POUserSysBLL = new POUserSystemInfo();
 
      //initizlize new object of PO User Attribute Model
      POInfo setPOUserInfo = new POInfo();
 
      DataTable dt = new DataTable();
      dt = (DataTable)ViewState["Users"];
 
 
      //Create new row in the DataSource
      DataRow newRow = this.Users.NewRow();
 
      //Insert new values
      Hashtable newValues = new Hashtable();
 
 
      UserControl userControl = (UserControl)gridItem.FindControl(GridEditFormItem.EditFormUserControlID);
 
      RadTextBox txtfirstname = (userControl.FindControl("txtfirstname") as RadTextBox);
      RadTextBox txtlastname = (userControl.FindControl("txtlastname") as RadTextBox);
      RadTextBox txtusername = (userControl.FindControl("txtusername") as RadTextBox);
      RadTextBox txtemail = (userControl.FindControl("txtemail") as RadTextBox);
      RadMaskedTextBox txtPhone = (userControl.FindControl("txtPhone") as RadMaskedTextBox);
      RadMaskedTextBox txtExtension = (userControl.FindControl("txtExtension") as RadMaskedTextBox);
      RadMaskedTextBox txtfax = (userControl.FindControl("txtfax") as RadMaskedTextBox);
      RadTextBox txtjobtitle = (userControl.FindControl("txtjobtitle") as RadTextBox);
 
     
      setUserInfo.user_id = 0;
      setUserInfo.firstname = txtfirstname.Text;
      setUserInfo.lastname = txtlastname.Text;
      setUserInfo.sys_username = txtusername.Text;
      setUserInfo.jobtitle = txtjobtitle.Text;
      setUserInfo.designation = ' ';
      setUserInfo.phone = txtPhone.Text;
      setUserInfo.fax = txtfax.Text;
      setUserInfo.email = txtemail.Text;
      setUserInfo.update_date = DateTime.Now;
      setUserInfo.removed = false;
      setUserInfo.extension = txtExtension.Text;
      setUserInfo.update_date = DateTime.Now;
      setUserInfo.removed = false;
      setUserInfo.extension = txtExtension.Text;
 
      setUserInfo.update_by = 0;
 
      UserInfo GetUserName = UserBLL.GetUser(txtusername.Text.Trim());
 
 
      //Check if Username is not in the database.
      if (string.IsNullOrEmpty(GetUserName.sys_username))
      {
          //Insert New Record to the table in the database
          int NewUserID = 0;
          NewUserID = UserBLL.RegisterUser(setUserInfo);
 
          if (NewUserID > 0)
          {
 
              newValues["user_id"] = NewUserID;
              newValues["fullname"] = txtfirstname.Text + " " + txtlastname.Text;
              newValues["admin_name"] = "";
              newValues["title"] = "";
              newValues["email"] = txtemail.Text;
              newValues["phone"] = txtPhone.Text;
              newValues["fax"] = txtfax.Text;
 
              foreach (DictionaryEntry entry in newValues)
              {
                  newRow[(string)entry.Key] = entry.Value;
              }
 
              this.Users.Rows.Add(newRow);
              this.Users.AcceptChanges();
 
 
              //Clear ViewState and Refresh RadGrid Control
              //ViewState["Users"] = null;
                rgUsersMain.Rebind();
 
 
              //gridItem.OwnerTableView.IsItemInserted = false;
              Edit = true;
              EditItemIndex = rgUsersMain.MasterTableView.Items.Count - 1;
              Session["IsNewUser"] = true;
              Session["rgNewUserID"] = NewUserID;
          }
      }
      else
      {
          //Keep Insert Form Open
          Re_Insert = true;
          Session["PreviousUserInfo"] = setUserInfo;
          RadWindowManager1.RadAlert("User Already Exists", 330, 180, "User Error", "", "");
      }
 
 
  }

3. Finally, it calls the prepender event. IF Edit is true, it just needs to change the edit form and open the form with specific same UserID. How can I open the edit form WITH SPECIFIC SAME USERID ?  Do you have any suggestions regarding opening the edit form with UserID programmatically 

protected void rgUsersMain_PreRender(object sender, System.EventArgs e)
   {
       //Show Edit Form
       if (rgUsersMain.EditItems.Count > 0)
       {
           foreach (GridDataItem item in rgUsersMain.MasterTableView.Items)
           {
               if (item != rgUsersMain.EditItems[0])
                   item.Visible = false;
               else
                   rgUsersMain.EditItems[0].Enabled = false;
 
           }
 
           //Hide Add New User Button
           if (rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem).Length > 0)
           {
               GridCommandItem commandItem = rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem;
               commandItem.FindControl("AddNewRecordButton").Parent.Visible = false;
           }
 
       }
       //Show Insert Form
       else if (rgUsersMain.MasterTableView.IsItemInserted)
       {
           foreach (GridDataItem item in rgUsersMain.MasterTableView.Items)
               item.Visible = false;
 
 
           //Hide New User Button
           if (rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem).Length > 0)
           {
               GridCommandItem commandItem = rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem;
               commandItem.FindControl("AddNewRecordButton").Parent.Visible = false;
 
           }
 
       }
 
       //Once User Information is Updated, it still keep edit form open
       else if (Edit)
       {
           if (EditItemIndex != 0)
           {
               rgUsersMain.MasterTableView.Items[EditItemIndex.ToString()].Edit = true;
               rgUsersMain.MasterTableView.Rebind();
 
               foreach (GridDataItem item in rgUsersMain.MasterTableView.Items)
               {
 
                   if (item != rgUsersMain.EditItems[0])
                       item.Visible = false;
                   else
                       rgUsersMain.EditItems[0].Enabled = false;
               }
 
               //Hide Add New User Button
               if (rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem).Length > 0)
               {
                   GridCommandItem commandItem = rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem;
                   commandItem.FindControl("AddNewRecordButton").Parent.Visible = false;
               }
           }
       }
       else if (Re_Insert)
       {
           rgUsersMain.MasterTableView.IsItemInserted = true;
           rgUsersMain.Rebind();
 
           foreach (GridDataItem item in rgUsersMain.MasterTableView.Items)
               item.Visible = false;
 
           //Hide Add New User Button
           if (rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem).Length > 0)
           {
               GridCommandItem commandItem = rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem;
               commandItem.FindControl("AddNewRecordButton").Parent.Visible = false;
           }
 
           Re_Insert = false;
 
       }
       //IF BOTH INSERT and EDIT FORMS are not shown.
       else
       {
           //Show Add New User Button
           if (rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem).Length > 0)
           {
               GridCommandItem commandItem = rgUsersMain.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem;
               commandItem.FindControl("AddNewRecordButton").Parent.Visible = true;
 
           }
 
       }
 
 
   }
0
Kostadin
Telerik team
answered on 24 Jun 2013, 08:24 AM
Hi Chi Ming,

A possible solution is to traverse the items in the grid, detect those which are editable and set their Edit property to true. Check out the following code snippet.
private void RadGrid1_PreRender(object sender, System.EventArgs e)
   {
       foreach (GridItem item in RadGrid1.MasterTableView.Items)
       {
           if (item is GridEditableItem)
           {
               GridEditableItem editableItem = item as GridDataItem;
               if (editableItem["ID"].Text == "123")
               {
                   editableItem.Edit = true;
               }
           }
       }
       RadGrid1.Rebind();
   }


Regards,
Kostadin
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.
Tags
Grid
Asked by
Chi Ming
Top achievements
Rank 1
Answers by
Kostadin
Telerik team
Chi Ming
Top achievements
Rank 1
Share this question
or