Reputation: 418
I am trying to delete an item in gridview but the delete command is executing again on RowCommand. Here is the code. the code was in RowDeleting also but there also its keep on executing on Page Refresh. Whats the problem. Sorry about the tiny info ive provided..i apologize. now here is the limited code due to number of characters here
<div id="griddiv" style="border: 1px solid #C0C0C0; top:170px; height:260px; width:830px; overflow:auto">
<asp:GridView ID="gvDetails" DataKeyNames="Item" runat="server"
AutoGenerateColumns="False" CssClass="Gridview" HeaderStyle-BackColor="#61A6F8"
onrowdeleting="gvDetails_RowDeleting" ShowFooter="True" EnableViewState="true"
HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None"
BorderWidth="1px" CellPadding="4" EnableModelValidation="True"
GridLines="Horizontal" Width="797px" ForeColor="Black"
onrowcommand="gvDetails_RowCommand" onrowediting="gvDetails_RowEditing"
onrowcancelingedit="gvDetails_RowCancelingEdit"
onrowupdating="gvDetails_RowUpdating"
onrowdatabound="gvDetails_RowDataBound" >
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:ImageButton ID="imgbtnUpdatexx" CommandName="Update" runat="server" ImageUrl="/Style%20Library/Images/save.png" ToolTip="Update" ValidationGroup="GridViewDataRowGroup"/>
<asp:ImageButton ID="imgbtnCancelxx" CommandName="Cancel" runat="server" ImageUrl="/Style%20Library/Images/cancel.png" ToolTip="Cancel" ValidationGroup="GridViewDataRowGroup" />
</EditItemTemplate>
<ItemTemplate>
<asp:ImageButton ID="imgbtnEditxxxx" CommandName="Edit" runat="server" ImageUrl="/Style%20Library/Images/Edit.png" ToolTip="Edit" ValidationGroup="GridViewDataRowGroup" />
<asp:ImageButton ID="imgbtnDeletexx" CommandName="Delete" runat="server" OnClientClick="return confirm('Delete this Item ?');" ImageUrl="/Style%20Library/Images/delete.png" ToolTip="Delete" ValidationGroup="GridViewDataRowGroup" />
</ItemTemplate>
<FooterTemplate>
<asp:ImageButton ID="imgbtnAddxxxx" runat="server" CommandName="Insert" ImageUrl="/Style%20Library/Images/add.png" ToolTip="New Record" ValidationGroup="GridViewFooterRowGroup" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item">
<EditItemTemplate>
<%# Eval("ItemText")%>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblitemdesc" runat="server" Text='<%#Eval("ItemText") %>'/>
</ItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="DDL_Items" runat="server" Width="230px" Font-Names="Verdana" Font-Size="12px" DataTextField="Description" DataValueField="INVENTORY_ITEM_ID" >
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Quantity">
<EditItemTemplate>
<asp:TextBox ID="txtQty" runat="server" Text='<%#Eval("Quantity") %>' BackColor="LightSkyBlue" ForeColor="Black" />
<asp:RequiredFieldValidator ID="rfvEditQty" runat="server" ControlToValidate="txtQty" Text="*" Display="Dynamic" ValidationGroup="GridViewDataRowGroup" />
<asp:RangeValidator ID="RvEditQty" runat="server" ErrorMessage="*" Type="Integer" MinimumValue="1" MaximumValue="999999" ControlToValidate="txtQty" Display="Dynamic" ForeColor="Red" ValidationGroup="GridViewDataRowGroup"></asp:RangeValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblQty" runat="server" Text='<%#Eval("Quantity") %>'/>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtftrQty" runat="server" Text="0" />
<asp:RequiredFieldValidator ID="rfvQty" runat="server" ControlToValidate="txtftrQty" Text="*" Display="Dynamic" ValidationGroup="GridViewFooterRowGroup"/>
<asp:RangeValidator ID="RvFtrQty" runat="server" ErrorMessage="*" Type="Integer" MinimumValue="1" MaximumValue="999999" ControlToValidate="txtftrQty" Display="Dynamic" ForeColor="Red" ValidationGroup="GridViewFooterRowGroup" ></asp:RangeValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Needed-By">
<EditItemTemplate>
<asp:TextBox ID="txtNeededBy" runat="server" Text='<%#Eval("NeedBy") %>' BackColor="LightSkyBlue" ForeColor="Black" />
<asp:RequiredFieldValidator ID="reditNeededBy" runat="server" ControlToValidate="txtNeededBy" Text="*" Display="Dynamic" ValidationGroup="GridViewDataRowGroup" />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblNeededBy" runat="server" Text='<%#Eval("NeedBy") %>'/>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtftrNeededBy" runat="server" />
<asp:RequiredFieldValidator ID="rfvNeededBy" runat="server" ControlToValidate="txtftrNeededBy" Text="*" Display="Dynamic" ValidationGroup="GridViewFooterRowGroup" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White"></HeaderStyle>
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
public partial class EditPurchaseRequisitionUserControl : UserControl
{
public string reqId = "8";
string itemcat = "";
OraSPDataExchange.OraSPDataExchangeClient objServiceClient = new OraSPDataExchange.OraSPDataExchangeClient();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = new DataSet();
ds = objServiceClient.getItemCategories();
DD_ItemCategories.DataSource = ds;
DD_ItemCategories.DataTextField = "CATEGORY_DESCRIPTION";
DD_ItemCategories.DataValueField = "CATEGORY_ID";
DD_ItemCategories.DataBind();
btnSubmit.Enabled = false;
BindGridView();
fetchReqMaster();
fetchReqDetails();
}
}
protected void BindGridView()
{
//Declare a datatable for the gridview
DataTable dt = new DataTable();
dt.Columns.Add("Item");
dt.Columns.Add("ItemText");
dt.Columns.Add("Quantity");
dt.Columns.Add("NeedBy");
//Define a datarow for the datatable dt
DataRow dr = dt.NewRow();
//Now add the datarow to the datatable
dt.Rows.Add(dr);
gvDetails.DataSource = dt;
gvDetails.DataBind();
//Now hide the extra row of the grid view
gvDetails.Rows[0].Visible = false;
//Delete row 0 from the datatable
dt.Rows[0].Delete();
dt.AcceptChanges();
//View the datatable to the viewstate
ViewState["Data"] = dt;
}
protected void gvDetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int itemid = Convert.ToInt32(gvDetails.DataKeys[e.RowIndex].Values[0].ToString());
((DataTable)ViewState["Data"]).Rows[e.RowIndex].Delete();
((DataTable)ViewState["Data"]).AcceptChanges();
gvDetails.DataSource = (DataTable)ViewState["Data"];
gvDetails.DataBind();
DeleteGridItem(itemid);
//if (((DataTable)ViewState["Data"]).Rows.Count > 0)
//{
// gvDetails.DataSource = (DataTable)ViewState["Data"];
// gvDetails.DataBind();
//}
//else
//{
// DD_ItemCategories.Enabled = true;
// btnSubmit.Enabled = false;
// BindGridView();
//}
//gvDetails.DataSource = null;
//gvDetails.DataBind();
//DeleteGridItem(Convert.ToInt32(itemid));
//gvDetails.DataSource = (DataTable)ViewState["Data"];
//gvDetails.DataBind();
e.Cancel = true;
}
protected void gvDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Insert")
{
DropDownList DDItems = (DropDownList)gvDetails.FooterRow.FindControl("DDL_Items");
TextBox txtQty = (TextBox)gvDetails.FooterRow.FindControl("txtftrQty");
TextBox txtNeedBy = (TextBox)gvDetails.FooterRow.FindControl("txtftrNeededBy");
//Add the items to the gridview
DataTable dt = new DataTable();
//Assign the viewstate to the datatable
dt = (DataTable)ViewState["Data"];
DataRow dr = dt.NewRow();
dr["Item"] = DDItems.SelectedValue;
dr["ItemText"] = DDItems.SelectedItem.Text;
dr["Quantity"] = txtQty.Text;
dr["NeedBy"] = txtNeedBy.Text;
//Add the datarow to the datatable
dt.Rows.Add(dr);
if (((DataTable)ViewState["Data"]).Rows.Count > 0)
{
DD_ItemCategories.Enabled = false;
btnSubmit.Enabled = true;
}
//Now bind the datatable to the gridview
gvDetails.DataSource = dt;
gvDetails.DataBind();
//Add the details to viewstate also
ViewState["Data"] = dt;
}
//if (e.CommandName == "Delete")
//{
// int ind = Int32.Parse(e.CommandArgument.ToString());
// int itemID = Convert.ToInt32(gvDetails.DataKeys[ind].Values[0].ToString());
// ((DataTable)ViewState["Data"]).Rows[ind].Delete();
// ((DataTable)ViewState["Data"]).AcceptChanges();
// DeleteGridItem(itemID);
// gvDetails.DataSource = (DataTable)ViewState["Data"];
// gvDetails.DataBind();
//}
}
protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
OraSPDataExchange.OraSPDataExchangeClient objServiceClient2 = new OraSPDataExchange.OraSPDataExchangeClient();
DataSet dsitems = new DataSet();
dsitems = objServiceClient2.getItems(Convert.ToInt32(DD_ItemCategories.SelectedValue));
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlDropDownList = (DropDownList)e.Row.FindControl("DDL_Items");
if (ddlDropDownList != null)
{
ddlDropDownList.DataSource = dsitems.Tables[0];
ddlDropDownList.DataTextField = "DESCRIPTION";
ddlDropDownList.DataValueField = "INVENTORY_ITEM_ID";
ddlDropDownList.DataBind();
ddlDropDownList.SelectedValue = gvDetails.DataKeys[e.Row.RowIndex].Values[0].ToString();
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
DropDownList ddlDropDownList = (DropDownList)e.Row.FindControl("DDL_Items");
if (ddlDropDownList != null)
{
ddlDropDownList.DataSource = dsitems.Tables[0];
ddlDropDownList.DataTextField = "DESCRIPTION";
ddlDropDownList.DataValueField = "INVENTORY_ITEM_ID";
ddlDropDownList.DataBind();
ddlDropDownList.Items[0].Selected = true;
}
}
}
private int CheckUniqueData(int itemid)
{
for (int i = 0; i < gvDetails.Rows.Count; i++)
{
string itemval = gvDetails.Rows[0].Cells[0].Text;
if (Convert.ToInt32(itemval) == itemid)
return 1;
}
return 0;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
//Dictionary<string, int> retvalues = new Dictionary<string, int>();
int retvalues = CreateHeaderBlock();
//int dItemID = retvalues["vItemID"];
//int dItemCat = retvalues["vItemCatID"];
//CreateDetailBlock(dItemID, dItemCat);
Response.Write("<script>alert('Requisition submitted successfuly......'); window.location.href='http://portal.joshworld.local/SitePages/Home.aspx';</script>");
}
public int CreateHeaderBlock()
{
using (SPSite site = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb Web = site.OpenWeb())
{
Web.AllowUnsafeUpdates = true;
// Open List
SPList list = Web.Lists["Requisition_Master"];
// Add new item in List
SPListItem item = list.Items.Add();
item["Request ID"] = "";
item["Requester"] = lbl_Rname.Text;
item["Email"] = lbl_REmail.Text;
item["Department"] = lbl_RDept.Text;
item["Location"] = lbl_RLocation.Text;
item["Header_ItemCategory"] = DD_ItemCategories.SelectedItem.Text;
item["Header_Remarks"] = txtRemarks.Text;
item.Update();
// Get Item ID
int reqId = item.ID;
SPListItem uitem = list.GetItemById(reqId);
uitem["Request ID"] = reqId.ToString();
uitem.Update();
Web.AllowUnsafeUpdates = false;
// Dictionary<string, int> values = new Dictionary<string, int>();
// values.Add("vItemID", listItemId);
// values.Add("vItemCatID", Convert.ToInt32(DD_ItemCategories.SelectedValue));
// values.Add("hRequester", lbl_Rname.Text);
// values.Add("hLocation",lbl_RLocation.Text);
CreateDetailBlock(reqId, lbl_Rname.Text, lbl_RLocation.Text, Convert.ToInt32(DD_ItemCategories.SelectedValue), txtRemarks.Text);
return 1;
}
}
}
private void CreateDetailBlock(int headerreqID, string headerrequester, string headerloc, int headerItemCategory, string headerRemarks)
{
using (SPSite site = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb Web = site.OpenWeb())
{
//Web.AllowUnsafeUpdates = true;
// Open List
SPList list = Web.Lists["Requisition_Detail"];
//Loop through GridView Items
foreach (GridViewRow rowItem in gvDetails.Rows)
{
// Find Controls and read values here
string KeyItemID = gvDetails.DataKeys[rowItem.RowIndex].Values["Item"].ToString();
Label lblitemdesc = (Label)rowItem.FindControl("lblitemdesc");
Label lblitemqty = (Label)rowItem.FindControl("lblQty");
Label lblNeedBy = (Label)rowItem.FindControl("lblNeededBy");
Web.AllowUnsafeUpdates = true;
// Add new item in List
SPListItem item = list.Items.Add();
item["Request ID"] = headerreqID;
item["Header_Requester"] = headerrequester;
item["Header_Location"] = headerloc;
item["Item ID"] = Convert.ToInt32(KeyItemID);
item["Item Description"] = lblitemdesc.Text;
item["Quantity"] = Convert.ToInt32(lblitemqty.Text);
item["Needed_By"] = lblNeedBy.Text;
item["Header_Remarks"] = headerRemarks;
item.Update();
Web.AllowUnsafeUpdates = false;
}
}
}
}
private void setPortalUserInformation(string portalUser)
{
lbl_ROpUnit.Text = portalUser;
using (SPSite site = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb Web = site.OpenWeb())
{
//Web.AllowUnsafeUpdates = true;
// Open List
SPList list = Web.Lists["Req Approval Hierarchy"];
//SPListItem myItems = list.GetItemByIdSelectedFields(5, "EMAIL ADDRESS");
//SPListItem item = null;
//SPQuery query = new SPQuery();
const string camlQuery = @"<Query><Where><Eq><FieldRef Name='EMAIL_x0020_ADDRESS' /><Value Type='Text'>[email protected]</Value> </Eq> </Where></Query>";
SPQuery query = new SPQuery();
query.Query = camlQuery;
// Retrieving the data from the List
SPListItemCollection items = list.GetItems(query);
foreach (SPListItem objListItem in items)
{
lbl_Rname.Text = objListItem["Title"].ToString();
}
}
}
}
private void showinfo(string portal_user)
{
string camlQuery = @"<Where><Eq><FieldRef Name='EMAIL_x0020_ADDRESS' /><Value Type='Text'>" + portal_user + "</Value></Eq></Where>";
using (SPSite objSite = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
// Building a query
SPQuery query = new SPQuery();
query.Query = camlQuery;
// Retrieving the data from the List
SPList objList = objWeb.Lists["Requisition Hierarchy"];
SPListItemCollection items = objList.GetItems(query);
int licount = items.Count;
if (licount == 0)
lbl_Rname.Text = "Zero";
else
lbl_Rname.Text = licount.ToString();
foreach (SPListItem objListItem in items)
{
lbl_Rname.Text = objListItem["Title"].ToString();
lbl_RLocation.Text = objListItem["LOCATION"].ToString();
lbl_RDept.Text = objListItem["DEPARTMENT_x0020_NAME"].ToString();
lbl_REmail.Text = objListItem["EMAIL_x0020_ADDRESS"].ToString();
}
DD_ItemCategories.Items.FindByText(itemcat).Selected = true;
}
}
}
protected string ClearDomain(string sItem)
{
int sLoc = (sItem.IndexOf("\\") + 1);
string sOutPut;
sOutPut = sItem.Substring(sLoc);
return sOutPut;
}
private void fetchReqMaster()
{
string camlQuery = @"<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>" + reqId + "</Value></Eq></Where>";
using (SPSite objSite = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
// Building a query
SPQuery query = new SPQuery();
query.Query = camlQuery;
// Retrieving the data from the List
SPList objList = objWeb.Lists["Requisition_Master"];
SPListItemCollection items = objList.GetItems(query);
foreach (SPListItem objListItem in items)
{
lbl_Rname.Text = objListItem["Requester"].ToString();
lbl_RLocation.Text = objListItem["Location"].ToString();
lbl_RDept.Text = objListItem["Department"].ToString();
lbl_REmail.Text = objListItem["Email"].ToString();
DD_ItemCategories.ClearSelection();
itemcat = objListItem["Header_ItemCategory"].ToString();
}
DD_ItemCategories.Items.FindByText(itemcat).Selected = true;
}
}
}
private void fetchReqDetails()
{
gvDetails.DataSource = null;
gvDetails.DataBind();
string camlQuery = @"<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>" + reqId + "</Value></Eq></Where>";
using (SPSite objSite = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
// Building a query
SPQuery query = new SPQuery();
query.Query = camlQuery;
// Retrieving the data from the List
SPList objList = objWeb.Lists["Requisition_Detail"];
SPListItemCollection items = objList.GetItems(query);
//Add the items to the gridview
DataTable dtx = new DataTable();
//Assign the viewstate to the datatable
dtx = (DataTable)ViewState["Data"];
foreach (SPListItem objListItem in items)
{
DataRow dr = dtx.NewRow();
dr["Item"] = objListItem["Item_x0020_ID"].ToString();
dr["ItemText"] = objListItem["Item_x0020_Description"].ToString();
dr["Quantity"] = objListItem["Quantity"].ToString();
dr["NeedBy"] = objListItem["Needed_By"].ToString();
//Add the datarow to the datatable
dtx.Rows.Add(dr);
//Add the details to viewstate also
ViewState["Data"] = dtx;
}
//BindGridView();
if (((DataTable)ViewState["Data"]).Rows.Count > 0)
{
DD_ItemCategories.Enabled = false;
btnSubmit.Enabled = true;
}
//Add the items to the gridview
DataTable dtgrid = new DataTable();
//Assign the viewstate to the datatable
dtgrid = (DataTable)ViewState["Data"];
//Now bind the datatable to the gridview
gvDetails.DataSource = dtgrid;
gvDetails.DataBind();
}
}
}
public void DeleteGridItem(int gridItemId)
{
string camlQuery = @"<Where><Eq><FieldRef Name='Item_x0020_ID' /><Value Type='Text'>" + gridItemId + "</Value></Eq></Where>";
using (SPSite objSite = new SPSite("http://portal.joshworld.local/EFlowCenter"))
{
using (SPWeb objWeb = objSite.OpenWeb())
{
objWeb.AllowUnsafeUpdates = true;
// Building a query
SPQuery query = new SPQuery();
query.Query = camlQuery;
// Retrieving the data from the List
SPList objList = objWeb.Lists["Requisition_Detail"];
SPListItemCollection items = objList.GetItems(query);
items.Delete(0);
objWeb.AllowUnsafeUpdates = false;
}
}
}
}
Upvotes: 1
Views: 3004
Reputation: 753
Actually refresh is different from post back
if you do a refresh after a button post backs the method inside that button will execute again
this is its normal behavior this is what it should do basically a MSG from your browser will
warn that this will happen like this one :
To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.
You can do one thing if you would like is to catch when the page is doing refresh
and when the page is doing postback and control the actions you need to do in each.
Upvotes: 2
Reputation: 52
The Code reExecuting on page refresh is that you have not binding the gridview inside the code block
if(!IsPostBack){}
if you bind the gridview outside this block you will be reexecuting the code for each refresh.
and Next thing is place your delete code either in RowDeleting event or in RowCommand event. If you want to execute the delete operation in RowEditing event then change the linkbutton's/Buttons's command name to some other than "Delete".
For example
Now Access the delete code in RowCommand as follows
if(e.CommandName == "Del"){}
Upvotes: 0