酒店管理系统心得

来源:互联网 发布:python运行py文件 编辑:程序博客网 时间:2024/04/25 05:59

1.    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)//--------------------------更新事件
    {
        int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());
        int days = Convert.ToInt32(((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString());
        string price = GridView1.Rows[e.RowIndex].Cells[4].Text;
        string name = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString();
        string csid = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[7].Controls[0])).Text.ToString();
        string time = zawen.gettime();
        string totalprice = (days * int.Parse(price)).ToString();
        int fid = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[1].Text);
        zawen.updateroommange(days, name, csid, id, time);
        zawen.addroomhistory(fid, csid, name, time, totalprice);
        Response.Write("<script>alert('请付款" + totalprice + "');navigate('roommanage.aspx')</script>");
    }


其中的string time = zawen.gettime();
zawen.updateroommange(days, name, csid, id, time);
        zawen.addroomhistory(fid, csid, name, time, totalprice);
在点击确定按钮的时候,两个time都是一样的,客户端时间


其中的price原本是money类型,如果需要两个变量相乘的话,这两个变量类型必须是int型,虽然有int.Parse(price),但是会报错,字符串格式不正确,所以在绑定Gridview的时候,数据库SQL是这样写的

select rm.x_mid,rm.x_starttime,rm.x_rfid,rc.x_rcname,CAST(rc.x_rcprice as float) as x_rcprice,rm.x_days,rm.x_state,rm.x_csid,rm.x_csname from x_roommange rm,x_roominfo rf,x_roomclass rc where rm.x_rfid=rf.x_rfid and rf.x_rcid=rc.x_rcid


CAST(rc.x_rcprice as float) as x_rcprice 把money类型装换成float型,也可以convert(rc.x_rcprice,float) as x_rcprice  其中的 as x_rcprice是不可少的,如果缺少了,虽然SQL语句不会报错,但是Gridview里面会找不到x_rcprice字段


这里建议SQL语句中最好使用as 转换别名,这样别人就不会知道你数据库里面的字段

一般vs中默认的是,点击编辑按钮,全部列都可以编辑,调整每个列中的readonly=true或者不调整,这样你就可以控制想要编辑哪些列和不想编辑哪些列,如果你对那个textbox的宽度感觉太长了,对页面影响不好 你可以调整controlstyle里面的width属性,这样就可以控制textbox的宽度了

获取Gridview中的数据时有三种方法

1.设置datakeynames 例如

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        BorderColor="#3E4244" BorderStyle="Dotted" BorderWidth="1px" Width="690px"
        AllowPaging="True" DataKeyNames="x_mid"

获取主键值的方式:int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());

2.这个是readonly=true的时候,就是列不能编辑,以只读方式呈现
string price = GridView1.Rows[e.RowIndex].Cells[4].Text;

3.列可以编辑状态readonly=false
string name = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString();


GridView1.EditIndex = -1;这个是默认不处于编辑状态

GridView1.EditIndex = e.NewEditIndex;处于编辑状态

把现在时间装换成2010-8-23  String.Format("0:d".DateTime.Now)

为了获得房间历史表中的主键x_hid,就在roommange表中添加了一个starttime,因为同一个人有可能在这个酒店多次入住,这样就不好获取信息,但是入住的时间是不会相同的,虽然姓名和身份证号相同


对于DropDownList1,则有两种绑定方法,根据需要来选择

1.例如第一项,你要写成  “请选择” 的话 设置
<asp:ListItem Value="0" Selected="True">请选择</asp:ListItem>
相应的绑定方法为:
public void databind()
    {
        SqlCommand cmd = DataHelp.getcommand("fangjianxinxidropdownlist");
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            ListItem li = new ListItem(dr["name"].ToString(), dr["id"].ToString());
            DropDownList1.Items.Add(li);
        }
    }
如果没有 while (dr.Read()),你只会获得数据库中的第一项

如果没有 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            databind();
        }
    }
你什么也获得不到

2.你想直接绑定房间类型,不需要那个 “请选择”

public void databind2()
    {
        DropDownList1.DataTextField = "name";
        DropDownList1.DataValueField = "id";
        DropDownList1.DataSource = DataHelp.getdataset("fangjianxinxidropdownlist");
        DropDownList1.DataBind();
    }

1和2中 dr["id"].ToString(),DropDownList1.DataValueField = "id";这个id很重要,一般绑定的都是表中的主键字段

在Gridview里面编辑特定行,例如你dropdownlist选择里房间号456
下面列表中就出现了相应的信息,你要编辑的话,就需要在编辑事件里面编辑特定行了
 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)//-------------------------------------编辑按钮
    {
        GridView1.EditIndex = e.NewEditIndex;
        bangding();
    }


如果不要bangding();的话
 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)//-------------------------------------编辑按钮
    {
        GridView1.EditIndex = e.NewEditIndex;
    }

那样在点击编辑按钮的时候,需要点击两次才会出现textbox

如果 databind()是绑定gridview的数据源,下面是重新绑定
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)//-------------------------------------编辑按钮
    {
        GridView1.EditIndex = e.NewEditIndex;
        databind();
    }
这样的话,就会出现gridview第一行出现编辑状态,而不是你要选择的房间号 456了

编辑特定行都是通过主键字段来控制的

public void bangding()//----------------------------------------------------------------------------------------编辑特定行
    {
        if (DropDownList1.SelectedValue != "0")
        {
            databind1();
        }
        if (DropDownList1.SelectedValue == "0" && DropDownList2.SelectedValue == "0")
        {
            databind();
        }
        if (DropDownList2.SelectedValue != "0")
        {
            databind2();
        }
        if (DropDownList1.SelectedValue != "0" && DropDownList2.SelectedValue != "0")
        {
            Response.Write("<script>alert('房间号和状态只能选择一个');navigate('roommanage.aspx')</script>");
        }
    }
取消按钮也是同样的情况

SQL里面主要学会了 between and, cast ,convert,模糊查询(select * from x_roomclass where x_rcname like '%' + @roomname + '%')  模糊查询在转换的时候(字段直接模糊查询没有错)(select f.x_rfid,f.x_rfposition,c.x_rcname,c.x_rcprice from x_roominfo f,x_roomclass c where CAST(x_rfid as varchar) like '%' + @id + '%' and c.x_rcid=f.x_rcid),默认值,自动增长(alter table room add int id identity(1,1)),触发器(这个是为了减少恶意注册,应用范围很广,没有50秒内激活邮箱连接的用户,将会被50秒以后下一个注册的用户给T了)(ALTER trigger [dbo].[x_active] on [dbo].[x_regist] for insert
as
delete from x_regist where x_active=0 and datediff(s,x_regtime,getdate())>50)需要配合(insert into x_regist(x_name,x_pwd,x_email,x_regtime,x_active) values(@name,@pwd,@email,GETDATE(),0)插入数据库的时间必须为数据库时间GETDATE())

as 别名字段(select x_rcname as name,x_rcid as id from x_roomclass)
delete是删除一行或者多行的,不能删除一行中的某些字段的数据,可以用update把那些字段都等于null
update x_roommange set x_csid=null,x_csname=null,x_days=null,x_starttime=null,x_state='未订' where x_mid=@id

多表查询可以减少冗余数据的建立
select rh.x_rfid,rc.x_rcname,rh.x_csname,rh.x_csid,rh.x_hstarttime,rh.x_hendtime,rh.x_totalprice from x_roomhistory rh,x_roominfo rf,x_roomclass rc where rh.x_rfid=rf.x_rfid and rf.x_rcid=rc.x_rcid and rc.x_rcname=@name

所谓的邮箱激活无非是你点击了邮箱中网站发送的链接

message.Body = "感谢您使用 <a href='http://xche.cc.to'>晓车--xche.cc.to</a>! <br><br><br>" +
            " 请点击以下确认连接,以完成身份验证:<br>"
            + " http://xiaoche219.ushost19.idcys.com/tiaozhuan.aspx?spring="+DataHelp.Encrypt(name,"alsges12")+"&summer="+DataHelp.Encrypt(email,"alsges12") +
            "<br> 5分钟之内注册有效 (如果不能点击该链接地址,请复制并粘贴到浏览器的地址输入框)";

然后到达一个接收页面

protected void Page_Load(object sender, EventArgs e)
    {
        string name = Request.QueryString["spring"];
        string email = Request.QueryString["summer"];
        if (name == "" || email == "")
        {
            Response.Redirect("regist.aspx");
        }
        zawen.updateactive(zawen.selectid(DataHelp.Decrypt(name, "alsges12"), DataHelp.Decrypt(email, "alsges12")));
    }
就这样激活了,其中用到DEC加密算法


在基类页面里面 response,request,cookie等都是不能直接打出来的,

System.Web.HttpContext.Current.Session["checkcode"]
HttpContext.Current.Response.ContentType = "image/png";

给Gridview增加是否要删除
把boundfield字段装换成templatefield字段会有一个id

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Button deletebtn = (Button)e.Row.FindControl("Button1");
        if (deletebtn != null)
        {
            deletebtn.Attributes.Add("onclick", "return confirm('你确定要删除所选择的数据项吗?');");
        }
    }

你需要改变房间信息中的房间类型,进入到修改页面,同时dropdownlist需要绑定现在的房间类型,还需要有其他可供选择的房间类型,你直接绑定的话,那样现在的房间类型并没有处于选中状态,这样就不好了

用这种办法

public void databind1()
    {
        SqlCommand cmd = DataHelp.getcommand("selectbyidfangjianxinxi");
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(id);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            Label1.Text = id;
            txtposition.Text = dr["position"].ToString();
            DropDownList1.Items.FindByText(dr["name"].ToString()).Selected = true;
        }
    }

dropdownlist其实重要的就3个属性 selectedvalue,selecteditems.Text,selectedindex比较常用


JavaScript中邮箱格式的检验
function checkemail() {
    var email = document.getElementById("uemail").value;
    var myReg = /^[-a-zA-Z0-9_/.]+@([0-9A-Za-z][0-9A-Za-z-]+/.)+[A-Za-z]{2,5}$/;
    if (myReg.test(email)) {
        document.getElementById(list[1]).innerHTML="<img src='images/check_right.gif' />";
    }
    else {
        event.returnValue = false;
        document.getElementById(list[1]).innerHTML = "<font color=/"red/">Email 格式错误!</font>";
        return false;
    }
}

 

原创粉丝点击