Reputation: 1178
Okay this is probably a shot in the dark as it would be very difficult to guess what is going on here. But I am running out of options here.
So I have this code behind for a page that a user is able to fill out the input fields that are on the page and then by clicking the submit button, the information is added to the database. This works 100%. However, I want to put this functionality in a user control so I can use it on a different page but have the same effect. However I can't get this to work.
So here is the working code
The btnSubmit_Click method adds the information to the database without a problem.
Now for the user user control code. This doesn't do anything. The only difference I did was that it uses an ASPImageButton, which I had originally just a regular ASPButton but that didn't make a different.
So as I said a shot in the dark. If anyone has any suggestions on what to try or a fix please let me know. I can provide more information if needed.
Working Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SenProPOS.Data;
using SenProPOS.Web.Classes;
namespace SenProPOS.Web.Admin.Pages
{
public partial class InventoryMaintenance : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindInventoryEntries();
}
}
#region Properties
protected int CurrentInventoryID
{
get { return ViewState["CurrentInventoryID"] == null ? -1 : Convert.ToInt32(ViewState["CurrentInventoryID"].ToString()); }
set { ViewState["CurrentInventoryID"] = value; }
}
protected int CurrentInventoryMaintPage
{
get { return ViewState["CurrentInventoryMaintPage"] == null ? 1 : Convert.ToInt32(ViewState["CurrentInventoryMaintPage"].ToString()); }
set { ViewState["CurrentInventoryMaintPage"] = value; }
}
protected int InventoryEntriesPerPage
{
get { return Convert.ToInt32(ViewState["InventoryEntriesPerPage"] as String ?? "25"); }
set { ViewState["InventoryEntriesPerPage"] = value; }
}
#endregion
#region Methods
private void BindInventoryEntries()
{
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventories = context.Inventory_Items.ToList();
String search = tbInventorySearch.Text.Trim().ToLower();
if (!String.IsNullOrEmpty(search))
{
inventories = inventories.Where(x => x.Name.ToLower().Contains(search)
|| x.Description.ToLower().Contains(search.ToLower())
|| x.UPC == Convert.ToInt32(search)
|| x.Quantity == Convert.ToInt32(search)
|| (double)x.Price == Convert.ToDouble(search)
|| (double)x.Cost == Convert.ToDouble(search))
.ToList();
}
lvInventories.DataSource = inventories;
lvInventories.DataBind();
if (String.IsNullOrEmpty(this.lvInventories.SortExpression))
{
lvInventories.Sort("Name", SortDirection.Descending);
}
/**
var departments = context.Departments.ToList();
this.ddlDepartment.DataSource = departments;
this.ddlDepartment.DataValueField = "ID";
this.ddlDepartment.DataTextField = "Name";
this.ddlDepartment.DataBind();
var categories = context.Categories.ToList();
this.ddlCategory.DataSource = categories;
this.ddlCategory.DataValueField = "ID";
this.ddlCategory.DataTextField = "Name";
this.ddlCategory.DataBind();
* **/
}
}
catch (Exception ex)
{
;
}
}
private void InventoryEntrySelected(int InventoryID)
{
CurrentInventoryID = InventoryID;
this.tbName.Text = String.Empty;
this.tbUPC.Text = String.Empty;
this.tbDescription.Text = String.Empty;
this.tbQuantity.Text = String.Empty;
this.tbPricePerUnit.Text = String.Empty;
this.tbCostPerUnit.Text = String.Empty;
this.ddlDepartment.SelectedIndex = -1;
this.ddlCategory.SelectedIndex = -1;
if (CurrentInventoryID != -1)
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventory = context.Inventory_Items.SingleOrDefault(x => x.ID == CurrentInventoryID);
if (inventory != null)
{
this.tbName.Text = inventory.Name;
this.tbUPC.Text = inventory.UPC.ToString();
this.tbDescription.Text = inventory.Description;
this.tbQuantity.Text = inventory.Quantity.ToString();
this.tbPricePerUnit.Text = inventory.Price.ToString();
this.tbCostPerUnit.Text = inventory.Cost.ToString();
/** needs fixing yet
var department = this.ddlDepartment.Items.FindByValue(inventory..ToString());
if (department != null)
{
department.Selected = true;
}
var category = this.ddlCategories.Items.FindByValue(inventory.Category.ToString());
if (position != null)
{
position.Selected = true;
}
var category = this.ddlSuppliers.Items.FindByValue(inventory.Category.ToString());
if (supplier != null)
{
supplier.Selected = true;
}
**/
}
else throw new ApplicationException("The specified item was not found.");
}
}
}
#endregion
#region Event Handlers
protected override void OnPreRenderComplete(EventArgs e)
{
base.OnPreRenderComplete(e);
RegisterListViewButtonsForAsyncPostback(lvInventories, "btnInventoryEntryEdit", "btnInventoryEntryDelete");
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.btnSubmit.Click += new EventHandler(btnSubmit_Click);
this.btnInventoryAdd.Click += new EventHandler(btnInventoryAdd_Click);
this.lvInventories.ItemCommand += new EventHandler<ListViewCommandEventArgs>(lvInventory_ItemCommand);
this.lvInventories.PagePropertiesChanging += new EventHandler<PagePropertiesChangingEventArgs>(lvInventory_PagePropertiesChanging);
this.tbInventorySearch.TextChanged += new EventHandler(tbInventorySearch_TextChanged);
}
void tbInventorySearch_TextChanged(object sender, EventArgs e)
{
BindInventoryEntries();
}
void btnInventoryAdd_Click(object sender, EventArgs e)
{
InventoryEntrySelected(-1);
}
void lvInventory_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
BindInventoryEntries();
}
void lvInventory_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName.Equals("edit-item"))
{
InventoryEntrySelected(Int32.Parse(e.CommandArgument.ToString()));
}
else if (e.CommandName.Equals("delete-item"))
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inv = context.Inventory_Items.SingleOrDefault(x => x.ID == Int32.Parse(e.CommandArgument.ToString()));
if (inv != null)
{
context.Inventory_Items.DeleteOnSubmit(inv);
context.SubmitChanges();
BindInventoryEntries();
}
}
}
else if (e.CommandName.Equals("Sort") || e.CommandName.Equals("Page")) { BindInventoryEntries(); }
}
void btnSubmit_Click(object sender, EventArgs e)
{
if (!Page.IsValid) { return; }
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
Inventory_Item inv = null;
if (CurrentInventoryID > 0)
{
inv = context.Inventory_Items.SingleOrDefault(x => x.ID == CurrentInventoryID);
}
else
{
inv = new Inventory_Item();
context.Inventory_Items.InsertOnSubmit(inv);
}
if (inv != null)
{
if (!String.IsNullOrEmpty(this.tbName.Text))
{
inv.Name = this.tbName.Text;
}
else throw new ApplicationException("Invalid Name");
if (!String.IsNullOrEmpty(this.tbUPC.Text))
{
inv.UPC = Convert.ToInt64(this.tbUPC.Text);
}
else throw new ApplicationException("Invalid UPC#");
if (!String.IsNullOrEmpty(this.tbDescription.Text))
{
inv.Description = this.tbDescription.Text;
}
else throw new ApplicationException("Invalid Description");
if (!String.IsNullOrEmpty(this.tbQuantity.Text))
{
inv.Quantity = Convert.ToInt32(this.tbQuantity.Text);
}
else throw new ApplicationException("Invalid Quantity");
if (!String.IsNullOrEmpty(this.tbPricePerUnit.Text))
{
inv.Price = Convert.ToDecimal(this.tbPricePerUnit.Text);
}
else throw new ApplicationException("Invalid Price");
if (!String.IsNullOrEmpty(this.tbCostPerUnit.Text))
{
inv.Cost = Convert.ToDecimal(this.tbCostPerUnit.Text);
}
else throw new ApplicationException("Invalid Cost");
/**
int dep_id = 0;
if (Int32.TryParse(this.ddlDepartment.SelectedValue, out loc_id))
{
inv.Department = dep_id;
}
else throw new ApplicationException("Invalid Department");
int category = 0;
if (Int32.TryParse(this.ddlCategories.SelectedValue, out category))
{
inv.Category = category;
}
else throw new ApplicationException("Invalid Category");
**/
context.SubmitChanges();
BindInventoryEntries();
}
}
}
catch (ApplicationException ax)
{
;
}
}
#endregion
}
}
User Control Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SenProPOS.Data;
namespace SenProPOS.Web.Controls
{
public partial class AddEditInventoryItem : System.Web.UI.UserControl
{
public int? InventoryItemID = -1;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindInventoryItemData();
this.btnSubmit.Click += new ImageClickEventHandler(btnSubmit_Click);
}
}
void btnSubmit_Click(object sender, ImageClickEventArgs e)
{
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
Inventory_Item inv = null;
if (InventoryItemID > 0)
{
inv = context.Inventory_Items.SingleOrDefault(x => x.ID == InventoryItemID);
}
else
{
inv = new Inventory_Item();
context.Inventory_Items.InsertOnSubmit(inv);
}
if (inv != null)
{
if (!String.IsNullOrEmpty(this.tbName.Text))
{
inv.Name = this.tbName.Text;
}
else throw new ApplicationException("Invalid Name");
if (!String.IsNullOrEmpty(this.tbUPC.Text))
{
inv.UPC = Convert.ToInt64(this.tbUPC.Text);
}
else throw new ApplicationException("Invalid UPC#");
if (!String.IsNullOrEmpty(this.tbDescription.Text))
{
inv.Description = this.tbDescription.Text;
}
else throw new ApplicationException("Invalid Description");
if (!String.IsNullOrEmpty(this.tbQuantity.Text))
{
inv.Quantity = Convert.ToInt32(this.tbQuantity.Text);
}
else throw new ApplicationException("Invalid Quantity");
if (!String.IsNullOrEmpty(this.tbPricePerUnit.Text))
{
inv.Price = Convert.ToDecimal(this.tbPricePerUnit.Text);
}
else throw new ApplicationException("Invalid Price");
if (!String.IsNullOrEmpty(this.tbCostPerUnit.Text))
{
inv.Cost = Convert.ToDecimal(this.tbCostPerUnit.Text);
}
else throw new ApplicationException("Invalid Cost");
/**
int dep_id = 0;
if (Int32.TryParse(this.ddlDepartment.SelectedValue, out loc_id))
{
inv.Department = dep_id;
}
else throw new ApplicationException("Invalid Department");
int category = 0;
if (Int32.TryParse(this.ddlCategories.SelectedValue, out category))
{
inv.Category = category;
}
else throw new ApplicationException("Invalid Category");
**/
context.SubmitChanges();
BindInventoryItemData();
}
}
}
catch (ApplicationException ax)
{
;
}
}
public void BindInventoryItemData()
{
this.tbName.Text = String.Empty;
this.tbUPC.Text = String.Empty;
this.tbDescription.Text = String.Empty;
this.tbQuantity.Text = String.Empty;
this.tbPricePerUnit.Text = String.Empty;
this.tbCostPerUnit.Text = String.Empty;
this.ddlDepartment.SelectedIndex = -1;
this.ddlCategory.SelectedIndex = -1;
if (InventoryItemID != -1)
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventory = context.Inventory_Items.SingleOrDefault(x => x.ID == InventoryItemID);
if (inventory != null)
{
this.tbName.Text = inventory.Name;
this.tbUPC.Text = inventory.UPC.ToString();
this.tbDescription.Text = inventory.Description;
this.tbQuantity.Text = inventory.Quantity.ToString();
this.tbPricePerUnit.Text = inventory.Price.ToString();
this.tbCostPerUnit.Text = inventory.Cost.ToString();
/** needs fixing yet
var department = this.ddlDepartment.Items.FindByValue(inventory..ToString());
if (department != null)
{
department.Selected = true;
}
var category = this.ddlSuppliers.Items.FindByValue(inventory.Category.ToString());
if (supplier != null)
{
supplier.Selected = true;
}
**/
}
else throw new ApplicationException("The specified item was not found.");
}
}
}
}
}
Upvotes: 0
Views: 1634
Reputation: 2399
Why don't you try putting ( this.btnSubmit.Click += new ImageClickEventHandler(btnSubmit_Click);)
outside isnot postback?
Upvotes: 1
Reputation: 502
When you add the control to your page you should use runat=”server” . I can give you an example
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ register Src="~/WebUserControl.ascx" TagName="test" TagPrefix="testTag" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<testTag:test id="testId" runat="server" />
</asp:Content>
Please look on,
<testTag:test id="testId" runat="server" />
And be sure in your control u have used something like that
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/btn_submit.png"
onclick="ImageButton1_Click" />
Upvotes: 0
Reputation: 12458
Just a guess: Is the AspImageButton named "btnSubmit"? Is the Click event wired up correctly?
Upvotes: 0