Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

Îåêßíçóå áðü ôï ìÝëïò trinity. Τελευταία δημοσίευση από το μέλος trinity στις 10-04-2006, 15:37. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-04-2006, 13:33 11501

    Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Γεια σε όλους...
    Έχω ένα πρόβλημα το οποίο μου φαίνεται ανεξήγητο.. και δεν ξέρω και πως να το ψάξω στο web.. Μερικές φορές παίζει και μερικές όχι.. χωρίς κάποιο μοτίβο.. Το πράγμα έχει ως εξής.. Έχω μια λίστα με προιόντα τα οποία προσθέτω στο καλάθι αγορών ενός ηλεκ. καταστήματος. Άλλα τα προσθέτει και άλλο όχι.. απλά μερικές φορές δεν παίζει.. χωρίς λόγο ( εγώ πιστεύω Stick out tongue [:P] )

    Έχω ένα datagrid στο οποίο ορίζω ένα command
    OnItemCommand="Grid_CartCommand"
    μέσα σε ένα button column του έχω ορίσει
    CommandName="AddToCart"  και η συνάρτηση είναι η παρακάτω:

    public void Grid_CartCommand(Object sender, DataGridCommandEventArgs e)
            {
            TableCell IDCell = e.Item.Cells[1];
            string productID = IDCell.Text;

            if (((LinkButton)e.CommandSource).CommandName == "AddToCart")
            {

                ShoppingCartDB cart = new ShoppingCartDB();
       
                String cartId = cart.GetShoppingCartId();
       
               cart.AddItem(cartId, Int32.Parse(productID), 1);
               
            }
    }

    Το θέμα είναι ότι όταν δεν παίζει δεν περνάει καν μέσα στη συνάρτηση.. (και πριν το if βάζω breakpoints αλλά με αγνοεί... Geeked [8-|] )

    Αυτά...

    Ασχολούμαι με τη βλακεία πολύ καιρό.. σκέφτηκα να βάλω checkboxes για να επιλέγει τα προϊόντα αλλά έχω τεράστια περιέργεια να δω γιατί δεν παίζει..

    Ευχαριστώ πολύ και σορρυ για την πολυλογία.. Embarrassed [:$]


    Smile [:)]
  •  04-04-2006, 12:50 11546 σε απάντηση της 11501

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Μάλλον χρειάζονται περισσότερες πληροφορίες για τη λύση του προβλήματος σου. Μια πρώτη πρόχειρη δοκιμή με τις πληροφορίες που έδωσες δεν αναπαράγει το πρόβλημα που έχεις.

    Χρησιμοποιείς καθόλου javascript ή validations στη σελίδα σου;
    MSc Konstantinos Pantos
    MCP Software Engineer
    http://blog.pantos.name
    http://kostas.pantos.name
  •  04-04-2006, 14:51 11551 σε απάντηση της 11546

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    ..όχι, ουτε javascript ούτε validations..

    απλά ένα datagrid και καλώ ένα command .. τον κώδικα τον πήρα από τα quickstarts..  copy-paste..

    άλλες φορές παίζει και άλλες όχι... αυτό που δε μπορώ να καταλάβω είναι για ποιό λόγο όταν κάνω debug μερικές φορές περνάει μέσα από τον κώδικα (breakpoints) και άλλες όχι.. ενώ στο statusbar δείχνει να φορτώνει κάτι...

    Huh? [:^)]

    Smile [:)]
  •  04-04-2006, 15:59 11552 σε απάντηση της 11551

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Πήρα κι εγώ το κώδικα από το quickstart που αναφέρεις και παίζει μια χαρά. Τα βήματα που ακολούθησα είναι:

    1. Δημιούργησα ένα νέο text αρχείο που το ονόμασα cart.aspx

    2. Έκανα copy - paste το κώδικα του quickstart στο νέο αυτό αρχείο

    3. Από το Visual Studio και την επιλογή add new existing item πρόσθεσα στο project μου το προηγούμενο αρχείο.

    4. Έθεσα ως start page την cart.aspx

    5. Έτρεξα το project
    MSc Konstantinos Pantos
    MCP Software Engineer
    http://blog.pantos.name
    http://kostas.pantos.name
  •  06-04-2006, 14:11 11632 σε απάντηση της 11552

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Και σε μένα τρέχει μια χαρά μέχρι που βάζω το datagrid να γεμίζει απο τη βάση

     


    <asp:datagrid id="productgrid" Runat="server" Height="100%" AutoGenerateColumns="false" AlternatingItemStyle-CssClass="CartListItemAlt"


    ItemStyle-CssClass="CartListItem" FooterStyle-CssClass="CartListFooter" HeaderStyle-BackColor="Gainsboro"


    HeaderStyle-Font-Bold="True" HeaderStyle-Font-Name="Verdana, Arial" ShowFooter="false" Font-Size="8pt"


    Font-Name="Verdana" cellspacing="0" cellpadding="4" GridLines="Vertical" BorderColor="Gainsboro" OnItemCommand="Grid_CartCommand">


    <Columns>


    <asp:ButtonColumn HeaderText="Add to cart" Text="Add" CommandName="AddToCart" ItemStyle-Width="80" ItemStyle-HorizontalAlign="right" />


    <asp:BoundColumn HeaderText="Κωδικός Προϊόντος" DataField="ProductID" ItemStyle-Width="140" ItemStyle-HorizontalAlign="right" />


    <asp:TemplateColumn HeaderText="Όνομα Προϊόντος" ItemStyle-Width="350" ItemStyle-HorizontalAlign="left">


    <ItemTemplate>


    <asp:Label id="Name" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ModelName") %>' />


    </ItemTemplate>


    </asp:TemplateColumn>


    <asp:TemplateColumn HeaderText="Κατηγορία" ItemStyle-Width="80" ItemStyle-HorizontalAlign="left">


    <ItemTemplate>


    <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ModelNumber") %>' />


    </ItemTemplate>


    </asp:TemplateColumn>


    <asp:TemplateColumn HeaderText="Τιμή" ItemStyle-Width="80" ItemStyle-HorizontalAlign="left">


    <ItemTemplate>


    <asp:Label id="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "UnitCost", "{0:c}") %>' />


    </ItemTemplate>


    </asp:TemplateColumn>


    </Columns>


    </asp:datagrid>

    Smile [:)]
  •  06-04-2006, 20:07 11649 σε απάντηση της 11501

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Δεν νομίζω ότι το πρόβλημα σου έχει να κάνει με τη πηγή των δεδομένων σου (αν έρχονται από τη βάση ή από άλλη πηγή). Το πρόβλημα σου οφείλεται πιθανά στη μέθοδο Page_Load. Αν την έχεις αφήσει όπως είναι στο Sample που κατέβασες και δεν κάνεις έλεγχο αν έχεις έρθει από postback ή όχι στη σελίδα, τότε εκτελείτε κάθε φορά η DataBind() μέθοδος πάνω στα DataGrids με αποτέλεσμα τα events από τα ButtonCollumns να "καταπίνονται". Δοκίμασε να κάνεις DataBind μόνο στη περίπτωση που δεν έχεις postback όπως στο παράδειγμα που επισυνάπτω...
    Ελπίζω έτσι να λυθεί το πρόβλημα σου.



    <%@ Page enableViewState="True" %>
    <%@ Import Namespace="System.Data" %>
    <HTML>
     <script language="C#" runat="server">

        DataTable Cart;
        DataView CartView;

        ICollection CreateDataSource() {
            DataTable dt = new DataTable();
            DataRow dr;

            dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
            dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
            dt.Columns.Add(new DataColumn("DateTimeValue", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("BoolValue", typeof(bool)));
            dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));

            for (int i = 0; i < 9; i++) {
                dr = dt.NewRow();
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = DateTime.Now;
                dr[3] = (i % 2 != 0) ? true : false;
                dr[4] = 1.23 * (i+1);

                dt.Rows.Add(dr);
            }

            DataView dv = new DataView(dt);
            return dv;
        }

        void Page_Load(Object sender, EventArgs e)
        {
      if (Session["DG5_ShoppingCart"] == null) {
       Cart = new DataTable();
       Cart.Columns.Add(new DataColumn("Item", typeof(string)));
       Cart.Columns.Add(new DataColumn("Price", typeof(string)));
       Session["DG5_ShoppingCart"] = Cart;
      }
      else {
       Cart = (DataTable)Session["DG5_ShoppingCart"];
      }   
      CartView = new DataView(Cart);
      ShoppingCart.DataSource = CartView;
      CartView.Sort="Item";
      MyDataGrid.DataSource = CreateDataSource();
      
      if (!Page.IsPostBack)
      {
       ShoppingCart.DataBind();
       MyDataGrid.DataBind();
            }
        }

        void Grid_CartCommand(object sender, DataGridCommandEventArgs e) {
       
            DataRow dr = Cart.NewRow();
           
            // e.Item is the row of the table where the command fired
            // For bound columns the value is stored in the Text property of TableCell
            TableCell itemCell = e.Item.Cells[1];
            TableCell priceCell = e.Item.Cells[2];
            string item = itemCell.Text;
            string price = priceCell.Text;
           
            if (e.CommandName == "AddToCart") {
                dr[0] = item;
                dr[1] = price;
                Cart.Rows.Add(dr);
            }
            else {   //Remove from Cart
           
                CartView.RowFilter = "Item='"+item+"'";
                if (CartView.Count > 0) {   
                    CartView.Delete(0);
                }
                CartView.RowFilter = "";
            }
            ShoppingCart.DataBind();

        }

     </script>
     <body>
      <font face="Verdana">Using a Template Column in DataGrid</h3>
      <form id="Form1" runat="server">
       <table cellPadding="5">
        <tr vAlign="top">
         <b>Product List</b>
          <asp:datagrid id="MyDataGrid" runat="server" OnItemCommand="Grid_CartCommand" AutoGenerateColumns="False"
           HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellPadding="3" BorderWidth="1px"
           BorderColor="Black" Font-Names="Verdana">
           </HeaderStyle BackColor="#AAAADD">
           <Columns>
            </asp:ButtonColumn Text="Select" ButtonType="PushButton" HeaderText="Select" CommandName="AddToCart">
            </asp:BoundColumn DataField="StringValue" HeaderText="Item">
            <asp:BoundColumn DataField="CurrencyValue" HeaderText="Price" DataFormatString="{0:c}">
             </ItemStyle HorizontalAlign="Right">
            </asp:BoundColumn>
            <asp:TemplateColumn HeaderText="Assembly required?">
             <ItemTemplate>
              <asp:CheckBox ID=Chk1 Checked='<%# DataBinder.Eval(Container.DataItem, "BoolValue") %>' Enabled="false" runat="server" />
             </ItemTemplate>
            </asp:TemplateColumn>
           </Columns>
          </td>
         <b>Shopping Cart</b>
          </td id="ShoppingCart" runat="server" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt"
           Font-Name="Verdana" CellPadding="3" BorderWidth="1" BorderColor="black">
        </tr>
       </table>
      </form>
     </body>
    </HTML>


    MSc Konstantinos Pantos
    MCP Software Engineer
    http://blog.pantos.name
    http://kostas.pantos.name
  •  10-04-2006, 15:37 11751 σε απάντηση της 11649

    Απ: Πρόβλημα... (Εδώ το OnItemCommand εκεί το event..)

    Αυτό το είχα τσεκάρει και παλιότερα..

    και για να μη σας ταλαιπωρώ.. να και ο κώδικας της σελίδας

    protected System.Web.UI.WebControls.DataGrid productgrid;

    private void Page_Load(object sender, System.EventArgs e)

    {
        string catName = (string)Request.Params["CategoryName"];
        // Obtain products and databind to an asp:datalist control
        ASPNET.StarterKit.Commerce.ProductsDB productCatalogue = new ASPNET.StarterKit.Commerce.ProductsDB();
        if (!Page.IsPostBack)
        {
            productgrid.DataSource = productCatalogue.GetProducts(catName);
            productgrid.DataBind();
        }

    }

    public void Grid_CartCommand(Object sender, DataGridCommandEventArgs e)

    {
            ASPNET.StarterKit.Commerce.ShoppingCartDB cart = new ASPNET.StarterKit.Commerce.ShoppingCartDB();
            // Obtain current user's shopping cart ID
            String cartId = cart.GetShoppingCartId();
        TableCell IDCell = e.Item.Cells[1];
        string productID = IDCell.Text;
        if (((LinkButton)e.CommandSource).CommandName == "AddToCart")
        {
            // Add Product Item to Cart
            cart.AddItem(cartId, Int32.Parse(productID), 1);
        }
    }



    απ΄το StarterKit φυσικα..

    Smile [:)]
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems