Visual Studio Пользовательский контроль ASP, C #, код позади проблемы - PullRequest
0 голосов
/ 23 ноября 2011

Хорошо, это, вероятно, выстрел в темноте, так как было бы очень трудно догадаться, что здесь происходит.Но у меня заканчиваются варианты здесь.

Так что у меня есть этот код для страницы, которую пользователь может заполнить поля ввода, которые находятся на странице, а затем, нажав кнопку отправки, информациядобавлен в базу данных.Это работает на 100%.Однако я хочу поместить эту функцию в пользовательский элемент управления, чтобы я мог использовать ее на другой странице, но иметь тот же эффект.Однако я не могу заставить это работать.

Итак, вот рабочий код

Метод btnSubmit_Click добавляет информацию в базу данных без проблем.

Теперь для пользователя код управления пользователем .Это ничего не делает.Единственное отличие, которое я сделал, заключалось в том, что он использует ASPImageButton, который изначально был обычным ASPButton, но он не изменился.

Итак, как я сказал, выстрел в темноте.Если у кого-то есть предложения по поводу того, что попробовать или исправить, пожалуйста, дайте мне знать.Я могу предоставить больше информации, если это необходимо.

Рабочий код:

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

}
}

Код контроля пользователя:

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.");
            }
        }
    }
}
}

Ответы [ 3 ]

1 голос
/ 23 ноября 2011

Почему бы вам не попытаться поместить ( this.btnSubmit.Click += new ImageClickEventHandler(btnSubmit_Click);) снаружи, а не обратную передачу?

0 голосов
/ 23 ноября 2011

Когда вы добавляете элемент управления на свою страницу, вы должны использовать runat = ”server”. Я могу привести вам пример

<%@ 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>

Пожалуйста, смотрите,

<testTag:test id="testId" runat="server" />  

И будьте уверены, что вы использовали что-то подобное

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/btn_submit.png" 
    onclick="ImageButton1_Click" />
0 голосов
/ 23 ноября 2011

Просто предположение: AspImageButton называется "btnSubmit"?Правильно ли подключено событие Click?

...