protected void rpFruitImgList_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { FruitImg fruitImg = e.Item.DataItem as FruitImg; HtmlContainerControl divGridStackItem = e.Item.FindControl("divGridStackItem") as HtmlContainerControl; //把每个图片的gridstack.js的X/Y坐标值写入前端的HTML属性中 divGridStackItem.Attributes["data-gs-x"] = fruitImg.ImgSeqX.ToString(); divGridStackItem.Attributes["data-gs-y"] = fruitImg.ImgSeqY.ToString(); divGridStackItem.Attributes["data-gs-width"] = GRID_ITEM_WIDTH.ToString(); divGridStackItem.Attributes["data-gs-height"] = GRID_ITEM_HEIGHT.ToString(); } }
protected void Page_Load(object sender, EventArgs e) { WeChatUser wxUser = Session["WxUser"] as WeChatUser; try { if (!string.IsNullOrEmpty(Request.QueryString["EventID"])) { int eventID; if (int.TryParse(Request.QueryString["EventID"], out eventID)) { GroupPurchaseEvent groupEvent; groupEvent = GroupPurchaseEvent.FindGroupPurchaseEventByID(eventID); if (groupEvent != null) { //显示团购活动对应的团购信息 this.lblGroupName.Text = groupEvent.GroupPurchase.Name; this.lblGroupDesc.Text = groupEvent.GroupPurchase.Description; FruitImg mainImg = groupEvent.GroupPurchase.Product.FruitImgList.Find(img => img.MainImg); if (mainImg != default(FruitImg)) { this.imgProdImg.ImageUrl = "images/" + mainImg.ImgName; } else { this.imgProdImg.ImageUrl = "images/" + Config.DefaultImg; } this.lblRequiredNumber.Text = groupEvent.GroupPurchase.RequiredNumber.ToString(); this.lblProdPrice.Text = groupEvent.GroupPurchase.Product.FruitPrice.ToString(); this.lblProdPriceUnit.Text = groupEvent.GroupPurchase.Product.FruitUnit; this.lblGroupPrice.Text = groupEvent.GroupPurchase.GroupPrice.ToString(); this.lblGroupPriceUnit.Text = groupEvent.GroupPurchase.Product.FruitUnit; this.lblEventStardDate.Text = groupEvent.GroupPurchase.StartDate.ToString(); this.lblEventEndDate.Text = groupEvent.GroupPurchase.EndDate.ToString(); //查询此团购活动中已支付的成员 List <GroupPurchaseEventMember> paidEventMembers = groupEvent.GroupPurchaseEventMembers.FindAll(member => member.IsPaid); //此团购活动还缺的人数 int leftNumber; if (groupEvent.GroupPurchaseEventMembers != null) { if (groupEvent.GroupPurchase.RequiredNumber > paidEventMembers.Count) { leftNumber = groupEvent.GroupPurchase.RequiredNumber - paidEventMembers.Count; } else { leftNumber = 0; } } else { leftNumber = groupEvent.GroupPurchase.RequiredNumber; } if (leftNumber > 0) { this.lblLeftNumber.Text = leftNumber.ToString(); } else { this.divLeftNumber.Visible = false; } //只显示已支付成功的团购活动成员头像和列表 if (paidEventMembers != null) { string strEventMemberList = string.Empty, strEventMemberHeadImg = string.Empty; //团购活动的成员 paidEventMembers.ForEach(member => { strEventMemberHeadImg += string.Format("<img src='{0}'/>", member.GroupMember.HeadImgUrl); strEventMemberList += string.Format("<div class='col-xs-12 user-portrait {3}'><img src='{0}'/> 【{1}】 {2} {4}{5}</div>", member.GroupMember.HeadImgUrl, member.GroupMember.NickName, member.JoinDate.ToString(), !member.IsPaid ? "text-muted" : string.Empty, (member.GroupMember.OpenID == member.GroupPurchaseEvent.Organizer.OpenID) ? "开团" : "参团", !member.IsPaid ? "(未支付)" : string.Empty); }); //尚缺的团购活动成员头像 for (int i = 0; i < leftNumber; i++) { strEventMemberHeadImg += "<span class='empty-user-portrait'>?</span>"; if ((groupEvent.GroupPurchaseEventMembers.Count + i + 1) % 8 == 0) { strEventMemberHeadImg += "<br/>"; } } this.divGroupEventMemberHeadImg.InnerHtml = strEventMemberHeadImg; this.divGroupEventMember.InnerHtml = strEventMemberList; } DateTime nowTime = DateTime.Now; if (nowTime >= groupEvent.GroupPurchase.StartDate && nowTime <= groupEvent.GroupPurchase.EndDate) { //如果已支付成员数未达到要求人数,则允许新用户加入团购活动,否则不允许加入 if (paidEventMembers.Count < groupEvent.GroupPurchase.RequiredNumber) { this.divShareGroupEvent.Visible = true; this.divJoinGroupEvent.Visible = true; } else { this.divShareGroupEvent.Visible = false; this.divJoinGroupEvent.Visible = false; this.divCountDown.InnerHtml = "团购已经结束,欢迎下次参加!"; } } else { this.divShareGroupEvent.Visible = false; this.divJoinGroupEvent.Visible = false; if (nowTime < groupEvent.GroupPurchase.StartDate) { this.divCountDown.InnerHtml = "团购还未开始,敬请期待!"; } else { this.divCountDown.InnerHtml = "团购已经结束,欢迎下次参加!"; } } //把团购活动对象序列化为JSON对象,格式化其中的日期属性 JsonConvert.DefaultSettings = new Func <JsonSerializerSettings>(() => { JsonSerializerSettings jSetting = new JsonSerializerSettings(); jSetting.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; jSetting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; jSetting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; return(jSetting); }); string strGroupEvent = JsonConvert.SerializeObject(groupEvent); //设置团购商品信息,用于添加入购物车 ScriptManager.RegisterStartupScript(Page, this.GetType(), "jsGroupEvent", string.Format("var groupEvent={0};", strGroupEvent), true); } else { throw new Exception("不能找到ID对应的团购活动"); } } else { throw new Exception("团购活动ID错误"); } } else { throw new Exception("请指定团购ID"); } } catch (Exception ex) { this.lblMsg.Text = ex.Message; this.lblMsg.Visible = true; this.divContainer.Visible = false; } }
protected void dvFruit_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) { try { //当前的DetailView控件对象和当前记录主键值 DetailsView dvFruit = sender as DetailsView; int fruitID = int.Parse(dvFruit.DataKey.Value.ToString()); if (e.NewValues["FruitName"] == null) { throw new Exception("请输入商品名称"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["FruitName"].ToString()); } DropDownList ddlCategory = dvFruit.FindControl("ddlCategoryEdit") as DropDownList; if (ddlCategory.SelectedIndex == 0) { throw new Exception("请选择商品类别"); } else { UtilityHelper.AntiSQLInjection(ddlCategory.SelectedValue); } if (e.NewValues["FruitPrice"] == null) { throw new Exception("请输入商品价格"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["FruitPrice"].ToString()); } if (e.NewValues["FruitUnit"] == null) { throw new Exception("请输入商品单位"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["FruitUnit"].ToString()); } if (e.NewValues["FruitDesc"] == null) { throw new Exception("请输入商品描述"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["FruitDesc"].ToString()); } if (e.NewValues["InventoryQty"] == null) { throw new Exception("请输入商品库存数量"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["InventoryQty"].ToString()); } if (e.NewValues["OnSale"] == null) { throw new Exception("请输入是否上架"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["OnSale"].ToString()); } if (e.NewValues["IsSticky"] == null) { throw new Exception("请输入是否置顶"); } else { UtilityHelper.AntiSQLInjection(e.NewValues["IsSticky"].ToString()); } if (e.NewValues["Priority"] == null) { e.NewValues["Priority"] = 0; } else { UtilityHelper.AntiSQLInjection(e.NewValues["Priority"].ToString()); } //获取商品类别信息,添加入e.Values集合 Category category = new Category(); category.ID = int.Parse(ddlCategory.SelectedValue); e.NewValues.Add("Category", category); List <FruitImg> fruitImgList = new List <FruitImg>(); FruitImg fruitImg; //处理原有的图片:在DetailsView嵌套的Repeater中查找所有的子控件,并新建FruitImg对象,添加到集合中 Repeater rpFruitImgList = dvFruit.FindControl("rpFruitImgList") as Repeater; for (int i = 0; i < rpFruitImgList.Items.Count; i++) { HiddenField hfImgID = rpFruitImgList.Items[i].FindControl("hfImgID") as HiddenField; HiddenField hfImgSeqX = rpFruitImgList.Items[i].FindControl("hfImgSeqX") as HiddenField; HiddenField hfImgSeqY = rpFruitImgList.Items[i].FindControl("hfImgSeqY") as HiddenField; HyperLink hlOriginalImg = rpFruitImgList.Items[i].FindControl("hlOriginalImg") as HyperLink; RadioButton rbMainImg = rpFruitImgList.Items[i].FindControl("rbMainImg") as RadioButton; CheckBox cbDetailImg = rpFruitImgList.Items[i].FindControl("cbDetailImg") as CheckBox; TextBox txtImgDescEditOriginal = rpFruitImgList.Items[i].FindControl("txtImgDescEditOriginal") as TextBox; fruitImg = new FruitImg(); fruitImgList.Add(fruitImg); fruitImg.ImgID = int.Parse(hfImgID.Value); fruitImg.ImgName = hlOriginalImg.Text; fruitImg.ImgDesc = txtImgDescEditOriginal.Text.Trim(); fruitImg.MainImg = rbMainImg.Checked; fruitImg.DetailImg = cbDetailImg.Checked; int imgSeqX, imgSeqY; if (!int.TryParse(hfImgSeqX.Value, out imgSeqX)) { imgSeqX = 0; } if (!int.TryParse(hfImgSeqY.Value, out imgSeqY)) { imgSeqY = 0; } fruitImg.ImgSeqX = imgSeqX; fruitImg.ImgSeqY = imgSeqY; } //把FruitImgList对象附加到DetailView控件的e.NewValues键值对中,留待数据源控件odsFruit调用Fruit对象的update方法一起更新 e.NewValues.Add("FruitImgList", fruitImgList); //处理新上传的图片:把新上传的图片信息先行入库,并保存到服务器磁盘 HttpFileCollection imgFiles = Request.Files; if (imgFiles.Count != 0) { //存放新上传的图片 List <FruitImg> newFruitImgList = new List <FruitImg>(); FruitImg newFruitImg; int gridItemCount = GRID_COL / GRID_ITEM_WIDTH, currentIndex = fruitImgList.Count; for (int i = 0; i < imgFiles.Count; i++) { HttpPostedFile imgFile = imgFiles[i]; if (imgFile.ContentLength == 0) { continue; } string fileName, fileExtension; fileName = System.IO.Path.GetFileName(imgFile.FileName); fileExtension = System.IO.Path.GetExtension(fileName); //处理图片备注 string strImgDesc; if (i == 0) { TextBox txtImgDesc = dvFruit.FindControl("txtImgDescEdit") as TextBox; strImgDesc = txtImgDesc.Text; } else { string txtImgDescID = "dvFruit$txtImgDescEdit" + (i + 1); strImgDesc = Request.Form[txtImgDescID].ToString(); } if (Regex.IsMatch(fileExtension, string.Format("({0})", Config.AllowedUploadFileExt), RegexOptions.IgnoreCase)) { newFruitImg = new FruitImg(); newFruitImgList.Add(newFruitImg); newFruitImg.ImgName = fileName; newFruitImg.ImgDesc = strImgDesc; newFruitImg.MainImg = false; newFruitImg.DetailImg = false; //根据上传图片的序列号计算其gridstack的X/Y坐标值 newFruitImg.ImgSeqX = (currentIndex - currentIndex / gridItemCount * gridItemCount) * GRID_ITEM_WIDTH; newFruitImg.ImgSeqY = currentIndex / gridItemCount * GRID_ITEM_HEIGHT; currentIndex++; //保存新图片文件 imgFile.SaveAs(Request.MapPath("~/images/") + fileName); } } if (newFruitImgList.Count > 0) { //新图片信息入库 Fruit.AddFruitImg(fruitID, newFruitImgList); } } } catch (Exception ex) { this.lblErrMsg.Text = ex.Message; e.Cancel = true; this.gvFruitList.DataBind(); } }
protected void dvFruit_ItemInserting(object sender, DetailsViewInsertEventArgs e) { //DetailView会把所有绑定字段的键值放入e.Values集合,非绑定字段则不会自动处理,需要手工处理。 try { if (e.Values["FruitName"] == null) { throw new Exception("请输入商品名称"); } else { UtilityHelper.AntiSQLInjection(e.Values["FruitName"].ToString()); } DropDownList ddlCategoryInsert = ((DetailsView)sender).FindControl("ddlCategoryInsert") as DropDownList; if (ddlCategoryInsert.SelectedIndex == 0) { throw new Exception("请选择商品类别"); } else { UtilityHelper.AntiSQLInjection(ddlCategoryInsert.SelectedValue); } if (e.Values["FruitPrice"] == null) { throw new Exception("请输入商品价格"); } else { UtilityHelper.AntiSQLInjection(e.Values["FruitPrice"].ToString()); } if (e.Values["FruitUnit"] == null) { throw new Exception("请输入商品单位"); } else { UtilityHelper.AntiSQLInjection(e.Values["FruitUnit"].ToString()); } if (e.Values["FruitDesc"] == null) { throw new Exception("请输入商品描述"); } else { UtilityHelper.AntiSQLInjection(e.Values["FruitDesc"].ToString()); } //默认上架 if (e.Values["OnSale"] == null) { e.Values["OnSale"] = true; } else { UtilityHelper.AntiSQLInjection(e.Values["OnSale"].ToString()); } //默认不置顶 if (e.Values["IsSticky"] == null) { e.Values["IsSticky"] = false; } else { UtilityHelper.AntiSQLInjection(e.Values["IsSticky"].ToString()); } //默认优先级0 if (e.Values["Priority"] == null) { e.Values["Priority"] = 0; } else { UtilityHelper.AntiSQLInjection(e.Values["Priority"].ToString()); } //获取商品库存数量,默认为不限量 if (e.Values["InventoryQty"] == null) { e.Values["InventoryQty"] = -1; } else { UtilityHelper.AntiSQLInjection(e.Values["InventoryQty"].ToString()); } //获取商品类别信息,添加入e.Values集合 Category category = new Category(); category.ID = int.Parse(ddlCategoryInsert.SelectedValue); e.Values.Add("Category", category); HttpFileCollection imgFiles = Request.Files; if (imgFiles.Count != 0) { List <FruitImg> fruitImgList = new List <FruitImg>(); FruitImg fruitImg; //根据gridstack.js网格数、网格项宽度参数计算每行的网格项数量,用于后续计算每个网格项的X/Y坐标值 int gridItemCount = GRID_COL / GRID_ITEM_WIDTH, currentIndex; //遍历文件上传框 for (int i = 0; i < imgFiles.Count; i++) { HttpPostedFile imgFile = imgFiles[i]; if (imgFile.ContentLength == 0) { continue; } string fileName, fileExtension; fileName = System.IO.Path.GetFileName(imgFile.FileName); fileExtension = System.IO.Path.GetExtension(fileName); //处理图片备注 string strImgDesc; if (i == 0) { TextBox txtImgDesc = ((DetailsView)sender).FindControl("txtImgDescInsert") as TextBox; strImgDesc = txtImgDesc.Text; } else { string txtImgDescID = "dvFruit$txtImgDescInsert" + (i + 1); strImgDesc = Request.Form[txtImgDescID].ToString(); } if (Regex.IsMatch(fileExtension, string.Format("({0})", Config.AllowedUploadFileExt), RegexOptions.IgnoreCase)) { fruitImg = new FruitImg(); fruitImgList.Add(fruitImg); fruitImg.ImgName = fileName; fruitImg.ImgDesc = strImgDesc; fruitImg.DetailImg = false; //根据上传图片的序列号计算其gridstack的X/Y坐标值 currentIndex = (fruitImgList.Count - 1); fruitImg.ImgSeqX = (currentIndex - currentIndex / gridItemCount * gridItemCount) * GRID_ITEM_WIDTH; fruitImg.ImgSeqY = currentIndex / gridItemCount * GRID_ITEM_HEIGHT; //保存新图片文件 imgFile.SaveAs(Request.MapPath("~/images/") + fileName); } } if (fruitImgList.Count > 0) { //默认新上传的第一个是主图 fruitImgList[0].MainImg = true; //把需要上传的图片信息加入DetailView控件的e.Values集合中,留待数据源控件odsFruit调用Fruit对象的insert方法一起插入 e.Values.Add("FruitImgList", fruitImgList); } } else { throw new Exception("请选择商品图片"); } } catch (Exception ex) { this.lblErrMsg.Text = ex.Message; e.Cancel = true; this.gvFruitList.DataBind(); } }