现在的页面是这个样子的:
借用了永和收银系统的后台代码,实现了本页面的增删改,食物不多,索性去除了"查"
页面实现了上下下拉框的联动,上面是何种菜系,下面就是哪个
当点击编辑和删除时,效果图如下
页面核心代码:
gridview控件:
<asp:GridView ID="gvFood" class="gv" runat="server" AutoGenerateColumns="False" OnRowEditing="gvFood_Editing" OnRowUpdating="gvFood_Updating" OnRowDeleting="gvFood_Deleting" OnRowCancelingEdit="gvFood_CancelingEdit" DataKeyNames="foodId" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" AllowPaging="True" OnPageIndexChanging="gvFood_PageIndexChanging" OnSelectedIndexChanged="gvFood_SelectedIndexChanged" HorizontalAlign="Center" EmptyDataText="您好,没有您要查找的记录."> <FooterStyle BackColor="White" ForeColor="#000066" /> <RowStyle ForeColor="#000066" HorizontalAlign="Center" /> <PagerStyle HorizontalAlign="Center" /> <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" HorizontalAlign="Center" /> <AlternatingRowStyle BackColor="#F7F7F7" /> <Columns> <asp:TemplateField HeaderText="食物ID"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%#Bind("foodid") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="食物名称"> <EditItemTemplate> <asp:TextBox ID="txtFoodName" MaxLength="8" runat="server" Text='<%#Bind("foodName") %>' Width="120px"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%#Bind("foodName") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="食物价格"> <EditItemTemplate> <asp:TextBox ID="txtPrice" runat="server" Text='<%#Bind("price") %>' Width="90px" onkeypress="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value; else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onkeyup="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value; if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onblur="if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value; else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value}"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label3" runat="server" Text='<%#Bind("price") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="所属菜系"> <ItemTemplate> <asp:Label ID="Label4" runat="server" Text='<%#Bind("foodTypeName") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="编辑" ShowHeader="False"> <EditItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="更新"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="取消"></asp:LinkButton> </EditItemTemplate> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="编辑"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="删除" ShowHeader="False"> <ItemTemplate> <asp:LinkButton ID="lbtnDelete" runat="server" CausesValidation="True" CommandName="Delete" Text="删除" OnClientClick="return confirm('确定要删除吗?')"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
编辑菜名和价格代码:
//编辑GridView,进入编辑状态 protected void gvFood_Editing(object sender, GridViewEditEventArgs e) { gvFood.EditIndex = e.NewEditIndex; BindFoodOnlyFoodTypeId(); }
//取消编辑 protected void gvFood_CancelingEdit(object sender, GridViewCancelEditEventArgs e) { gvFood.EditIndex = -1; BindFoodOnlyFoodTypeId(); }
protected void gvFood_Updating(object sender, GridViewUpdateEventArgs e) { TxtFoodName.Text = ""; TxtPrice.Text = ""; Entity.Food m_Food = new Food(); //食物ID,两次赋值,等号右边是一个东西 m_Food.foodId = Convert.ToInt32(gvFood.DataKeys[e.RowIndex].Value.ToString().Trim()); int foodId = Convert.ToInt32(gvFood.DataKeys[e.RowIndex].Value.ToString().Trim()); //新食物名 m_Food.foodName = ((TextBox)gvFood.Rows[e.RowIndex].Cells[0].FindControl("txtFoodName")).Text.ToString(); //通过食物Id来查找对应的食物名称,如果更新时更新的是名称则对名称进行判断 //如果不是改的名称,则进行更新 DataTable FindDt = new DataTable(); //SelectFoodByFoodId SFoodByid = new SelectFoodByFoodId(); FindDt = mmbao.QueryFoodByFoodId(foodId); //旧食物名 string FoodName = FindDt.Rows[0][1].ToString(); int FoodTypeId = Convert.ToInt32(FindDt.Rows[0][4].ToString()); //string FoodTypeId = FindDt.Rows[0]["foodTypeId"].ToString(); //判断名称是否改变了 if (m_Food.foodName != FoodName) { //菜名改变了就继续判断-- //判断食物名称是否存在 //Bll.IsExistFoodName m_IsExist = new Bll.IsExistFoodName(); //bool Flag = m_IsExist.IsExistFoodName(m_Food.foodName); bool Flag = mmbao.IsExistsThisFood(m_Food.foodName,FoodTypeId); if (Flag == true) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('食物类型名称重复,请修改!');</script>"); return; } } if (m_Food.foodName.Trim() == "") { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('菜名不允许为空!');</script>"); return; } string newPrice = ((TextBox)gvFood.Rows[e.RowIndex].Cells[0].FindControl("txtPrice")).Text.ToString(); if (newPrice == "") { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('菜价格不允许为空!');</script>"); return; } //新食物名 string newfoodName = ((TextBox)gvFood.Rows[e.RowIndex].Cells[0].FindControl("txtFoodName")).Text.ToString(); //新价格 decimal afterPrice = Convert.ToDecimal(newPrice); Food updatefood = new Food(); updatefood.foodName = newfoodName; updatefood.price = afterPrice; updatefood.foodId = foodId; bool flag = mmbao.updateFood(updatefood); if (true) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('修改成功!');</script>"); } else { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('修改失败,请联系管理员');</script>"); return; } //更新完毕,取消更新 gvFood.EditIndex = -1; BindFoodOnlyFoodTypeId(); }
代码编写理念是三层的数据传递,加上了一些BS编程的特点,并不难搞,因为有永和的支持,看永和的代码,填补了我初期学BS的空白,多学习,多进步