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

[Solved] Fire Insert/Update/Delete events in button click outside grid

8 Answers 817 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Venkatesh
Top achievements
Rank 1
Venkatesh asked on 14 Jan 2013, 06:41 AM
Hi,

Currently i have the items in the grid getting inserted/deleted/updated in the "oninsertcommand/ondeletecommand/onupdatecommand" events.

However, I want to do these grid changes only when the submit button is clicked.

Currently in the grid I have the below UI:
OnInsertCommand="radgrid1_InsertCommand" OnUpdateCommand="radgrid1_UpdateCommand" OnDeleteCommand="radgrid1_DeleteCommand"


How to achieve Insert/Update/delete in the submit button click? 

8 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 14 Jan 2013, 06:54 AM
Hi,

You can use firecommand event as shown below.
C#:
protected void Button1_Click(object sender, EventArgs e)
{
 RadGrid grid = (this.FindControl("RadGrid1") as RadGrid);
 (grid.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem).FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty);
 (grid.MasterTableView.GetItems(GridItemType.EditItem)[0] as GridEditableItem).FireCommandEvent(RadGrid.UpdateCommandName, string.Empty);
}

Thanks,
Shinu
0
Venkatesh
Top achievements
Rank 1
answered on 14 Jan 2013, 06:56 AM
H,
Thanks for the reply.

How to know that its insert or update in the submit button?
Also, is there a fire commanad for the delete operation also?
0
Shinu
Top achievements
Rank 2
answered on 15 Jan 2013, 10:15 AM
Hi,

Please check the following code snippet to distinguish insert and update.

C#:
protected void Button1_Click(object sender, EventArgs e)
{
     RadGrid grid = (this.FindControl("RadGrid1") as RadGrid);
     if (grid.MasterTableView.IsItemInserted)
     {
         (grid.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem).FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty);
     }
     else if (grid.EditItems.Count > 0)
     {
         grid.EditItems[0].FireCommandEvent(RadGrid.UpdateCommandName, string.Empty);
     }
     else if(your condition for deletion)
     {
         (grid.MasterTableView.GetItems(GridItemType.Item)[0] as GridDataItem).FireCommandEvent(RadGrid.DeleteCommandName, string.Empty);
     }
}

Thanks,
Shinu.
0
Venkatesh
Top achievements
Rank 1
answered on 15 Jan 2013, 10:19 AM
Hi.
Thank you very much for the reply.

How should the radgrid UI be?

Thanks
0
Shinu
Top achievements
Rank 2
answered on 16 Jan 2013, 05:02 AM
Hi Venkatesh,

Please take a look into the sample code snippet I tried.

ASPX:
<telerik:RadGrid ID="RadGrid1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="false"
    OnItemCreated="RadGrid1_ItemCreated">
    <MasterTableView CommandItemDisplay="Top" EditMode="InPlace">
        <Columns>
            <telerik:GridBoundColumn DataField="OrderID" HeaderText="OrderID" UniqueName="OrderID">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ShipName" HeaderText="ShipName" UniqueName="ShipName">
            </telerik:GridBoundColumn>
            <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" UniqueName="ShipCity">
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%#Eval("CustomerID") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("CustomerID") %>'></asp:TextBox>
                </EditItemTemplate>
            </telerik:GridTemplateColumn>
            <telerik:GridEditCommandColumn ButtonType="ImageButton">
            </telerik:GridEditCommandColumn>
            <telerik:GridClientDeleteColumn ButtonType="ImageButton">
            </telerik:GridClientDeleteColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

C#:
protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
    if (e.Item is GridEditableItem && e.Item.IsInEditMode)
    {
        if (!e.Item.OwnerTableView.IsItemInserted)
        {
            ImageButton updateButton = (ImageButton)e.Item.FindControl("UpdateButton");
            updateButton.Visible = false;
        }
        else
        {
            ImageButton insertButton = (ImageButton)e.Item.FindControl("PerformInsertButton");
            insertButton.Visible = false;
        }
        ImageButton cancelButton = (ImageButton)e.Item.FindControl("CancelButton");
        cancelButton.Visible=false;
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    RadGrid grid = (this.FindControl("RadGrid1") as RadGrid);
    if (grid.MasterTableView.IsItemInserted)
    {
        (grid.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem).FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty);
    }
    else if (grid.EditItems.Count > 0)
    {
        grid.EditItems[0].FireCommandEvent(RadGrid.UpdateCommandName, string.Empty);
    }
    else
    {
        (grid.MasterTableView.GetItems(GridItemType.Item)[0] as GridDataItem).FireCommandEvent(RadGrid.DeleteCommandName, string.Empty);
    }
}

Thanks,
Shinu.
0
Venkatesh
Top achievements
Rank 1
answered on 16 Jan 2013, 06:56 AM
HI Shinu,
Thank you very much for the reply. Your code is almost working.

I have modified the code according to my scenario.
<telerik:RadGrid ID="RadGrid1" runat="server" ShowStatusBar="True" EnableViewState="true"
    ShowFooter="True" OnDeleteCommand="RadGrid1_DeleteCommand" OnNeedDataSource="RadGrid1_NeedDataSource"
    CellSpacing="0" GridLines="None" OnItemCreated="RadGrid1_ItemCreated">
    <MasterTableView DataKeyNames="ProductNumber" ShowHeadersWhenNoRecords="true"
        CommandItemDisplay="Bottom" EnableNoRecordsTemplate="false" AutoGenerateColumns="false"
        EditMode="InPlace" CommandItemSettings-ShowRefreshButton="false">
        <CommandItemTemplate>
            <asp:Button ID="btnAddItem" Text="Add New Item" runat="server" CommandName="InitInsert">
            </asp:Button>
        </CommandItemTemplate>
        <Columns>
        <telerik:GridTemplateColumn UniqueName="ProductNumber" HeaderText="Product Number" DataField="ProductNumber">
            <EditItemTemplate>
                <asp:TextBox ID="txtProductNumber" runat="server" ></asp:TextBox>
            </EditItemTemplate>        
        </telerik:GridTemplateColumn>
  
       
          
  
        <telerik:GridTemplateColumn UniqueName="OrderQuantity" HeaderText="Order Quantity" DataField="OrderQuantity">
            <EditItemTemplate>           
                <telerik:RadNumericTextBox ID="txtOrderQuantity" runat="server" >
                </telerik:RadNumericTextBox>                
            </EditItemTemplate>        
        </telerik:GridTemplateColumn>
  
        <telerik:GridTemplateColumn UniqueName="UnitPrice" HeaderText="Unit Price" DataField="UnitPrice">
            <EditItemTemplate>
                <telerik:RadNumericTextBox ID="txtUnitPrice" runat="server" >
                </telerik:RadNumericTextBox>              
            </EditItemTemplate>        
        </telerik:GridTemplateColumn>
  
            <telerik:GridCalculatedColumn DataFormatString="{0:C}" DataType="System.Double" HeaderText="Extended Price"
                UniqueName="PORFExtendedPrice" DataFields="OrderQuantity,UnitPrice" Expression="{0}*{1}"
                Aggregate="Sum" Visible="true">                
            </telerik:GridCalculatedColumn>
  
            <telerik:GridEditCommandColumn ButtonType="ImageButton">           
            </telerik:GridEditCommandColumn>
            <telerik:GridClientDeleteColumn ButtonType="ImageButton">
            </telerik:GridClientDeleteColumn>
  
        </Columns>
    </MasterTableView>
    <ClientSettings EnableRowHoverStyle="true">
    </ClientSettings>
</telerik:RadGrid>
<div>
</div>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

public DataTable OrderGridData
        {
            get
            {
                if (ViewState["OrderGridData"] != null)
                {
                    return (DataTable)ViewState["OrderGridData"];
                }
                else
                {
                    return CreateEmptyTable();
                }
            }
            set
            {
                ViewState["OrderGridData"] = value;
            }
        }
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                bindGrid();
            }            
        }        
  
        private DataTable CreateEmptyTable()
        {
            DataTable dt = new DataTable("GridOrderData");
  
            try
            {
                dt.Columns.Add(new DataColumn("ProductNumber"));
                dt.Columns.Add(new DataColumn("OrderQuantity"));
                dt.Columns.Add(new DataColumn("UnitPrice"));
                dt.Columns.Add(new DataColumn("ExtendedPrice"));
                dt.Columns.Add(new DataColumn("Flag"));
                dt.Columns["OrderQuantity"].DataType = typeof(double);
                dt.Columns["UnitPrice"].DataType = typeof(double);
  
            }
            catch (Exception)
            {
                throw;
            }
            return dt;
        }
  
        private void bindGrid()
        {
            DataTable ds = new DataTable();
            RadGrid1.DataSource = addBlankLines(ds, 5);
            RadGrid1.DataBind();
        }
  
        protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            DataTable ds = new DataTable();
            RadGrid1.DataSource = addBlankLines(ds, 5);
        }
protected void Button1_Click(object sender, EventArgs e)
        {
           RadGrid grid = (this.FindControl("RadGrid1") as RadGrid);
            if(grid.MasterTableView.IsItemInserted)
            {
                (grid.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem).FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty);
            }
            else if(grid.EditItems.Count > 0)
            {
                grid.EditItems[0].FireCommandEvent(RadGrid.UpdateCommandName, string.Empty);
            }
            else
            {
                (grid.MasterTableView.GetItems(GridItemType.Item)[0] as GridDataItem).FireCommandEvent(RadGrid.DeleteCommandName, string.Empty);
            }
        }
  
        protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e)
        {
            if (e.Item is GridEditableItem && e.Item.IsInEditMode)
            {
                if (!e.Item.OwnerTableView.IsItemInserted)
                {
                    ImageButton updateButton = (ImageButton)e.Item.FindControl("UpdateButton");
                    updateButton.Visible = false;
                }
                else
                {
                    ImageButton insertButton = (ImageButton)e.Item.FindControl("PerformInsertButton");
                    insertButton.Visible = false;
                }
                ImageButton cancelButton = (ImageButton)e.Item.FindControl("CancelButton");
                cancelButton.Visible = false;
            }
        }
  
        private DataTable addBlankLines(DataTable ds, int num)
        {
            ds = this.OrderGridData;                  
            if (num != 0)
            {
                DataRow drBlank = default(DataRow);
                for (int i = 0; i < num; i++)
                {
                    drBlank = ds.NewRow();
                    ds.Rows.Add(drBlank);
                }
                int j;
                for (j = 0; j < ds.Rows.Count; j++)
                {
                    ds.Rows[j]["Flag"] = "exist";
                }
            }            
            this.OrderGridData = ds;
            return ds;
        }


1) Initially I want 5 rows to be in Insert mode. How to achieve that?
2) In the Button click, how to retrieve the values?
3) when user clicks "Add New Item" button, i want to create a only one row in which user can insert data. Currently i am getting 5 blank rows which does not show any textbox.

Thanks
0
Caio
Top achievements
Rank 1
answered on 31 Jul 2013, 01:38 PM
Dear Shinu,

In my case I have a grid set to CommandItemDisplay="None"

The procedure below doesn't work.
(grid.MasterTableView.GetItems(GridItemType.CommandItem)[0] as GridCommandItem).FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty);

How then would i call the PerfomInsertCommand Name event from a button external to the radgrid?

0
Caio
Top achievements
Rank 1
answered on 31 Jul 2013, 06:47 PM
I found this it worked for me.

GridDataInsertItem insertItem = (GridDataInsertItem)GridLinhaDeTransporte.MasterTableView.GetInsertItem(); // accessing grid insert item
insertItem.FireCommandEvent("PerformInsert", string.Empty);
Tags
Grid
Asked by
Venkatesh
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Venkatesh
Top achievements
Rank 1
Caio
Top achievements
Rank 1
Share this question
or