asp.net中複選框checkbox選中datalist中的商品後顯示選中商品的臨時表


前臺

 總價錢:<asp:Label ID="lblsum" runat="server" Text="" CssClass="lab" Visible="false"></asp:Label> 

     <asp:LinkButton ID="lbtDetail"  runat="server" CommandName="Detail" 

            onclick="lbtDetail_Click"><span style="text-decoration:underline; color:#f74322; font-size:14px;">點擊詳情</span></asp:LinkButton> 

     <asp:DataGrid ID="dgList" runat="server" AutoGenerateColumns="true"  AllowPaging="True"

            HorizontalAlign="Center" ShowFooter="True" BackColor="White" 

            BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 

            ForeColor="Black" GridLines="Vertical" Height="79px" Width="270px" Visible="false">

         <FooterStyle BackColor="#CCCCCC" />

         <SelectedItemStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />

         <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />

         <AlternatingItemStyle BackColor="#CCCCCC" />

     <Columns>

     </Columns>

         <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />

     </asp:DataGrid> 

        <asp:Button  ID="btnOK" runat="server" Text="確定" onclick="btnOK_Click" CssClass="btn" Visible="false"/> 

  protected void lbtDetail_Click(object sender, EventArgs e)

    {

        this.dgList.Visible = true;//將點餐的datagrid顯示

        this.btnOK.Visible = true;//出現確定的按鈕

        this.lblsum.Visible = true;//將本單總價錢顯示出來

        //判斷是否選擇商品

        try

        {

            //選擇商品

            int num = 0;

            //循環判斷Datalist

            for (int i = 0; i < this.list.Items.Count; i++)

            {

                if ((this.list.Items[i].Controls[1] as CheckBox).Checked == true)

                {

                    num = num + 1;

                }

            }

            if (num == 0)

            {

                MessageBox.Show(this, "請選擇商品!");

                return;

            }

            //創建臨時表

            DataTable dtFoodSelect = new DataTable();

            //創建表中列名,注意存入的類型

            dtFoodSelect.Columns.Add("編號", Type.GetType("System.Int32"));

            dtFoodSelect.Columns.Add("名稱", Type.GetType("System.String"));

            dtFoodSelect.Columns.Add("單價", Type.GetType("System.String"));

            dtFoodSelect.Columns.Add("份數", Type.GetType("System.Int32"));

 

            double sum = 0;//此單總價

            //循環遍歷datalist

            foreach(DataListItem item in list.Items)

            {

                   

                    

                    CheckBox ckBox = (CheckBox)item.FindControl("check");//獲取datalist中的控件id

                    if(ckBox.Checked==true)

                    {

                        HiddenField hideID = (HiddenField)item.FindControl("giftID");//Datalist隱藏的,用於每個商品的id

                        int id = int.Parse(hideID.Value);//轉化爲int類型

                        //獲取表中狀態是上架的並且是複選框選中的商品

                        DataSet ds = new DataSetDA().selectData("select * from gift where state=1 and giftID='" + id + "'");

                        //DataRow是用來表示一個數據表的的數據行

                        DataRow newRow;

                        newRow = dtFoodSelect.NewRow();

                        //給臨時表各個列的行賦相應的值

                        newRow["編號"] = ds.Tables[0].Rows[0]["giftID"].ToString();

                        newRow["名稱"] = ds.Tables[0].Rows[0]["giftName"].ToString();

                        newRow["單價"] = ds.Tables[0].Rows[0]["giftPrice"].ToString();

                        TextBox tb = (TextBox)item.FindControl("number");//獲取datalisttextbox份數的值

                        newRow["份數"] = tb.Text;

                        dtFoodSelect.Rows.Add(newRow);//將這些值加入到臨時表中,這句話很關鍵

                        sum += Convert.ToSingle(ds.Tables[0].Rows[0]["giftPrice"]) * Convert.ToInt32(tb.Text);//將所有選中的單種商品的單價*份數累加起來

                    }

                }

            dgList.DataSource = dtFoodSelect;//Datagrid的數值來源臨時表

            dgList.DataBind();//綁定

            lblsum.Text = sum.ToString()+"";//datalist全部循環結束,顯示此單的總價    

        }

        catch(Exception ex)

        {

            MessageBox.Show(this, "選擇失敗!"+ex.Message.ToString());

        }

    }

    protected void btnOK_Click(object sender, EventArgs e)

    {

        //當此單提交後,臨時表和對應的總價消失

        this.dgList.Visible = false;

        this.btnOK.Visible = false;

        this.lblsum.Visible = false;

//也可以根據需要將剛纔的消費單寫進數據庫

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章