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("");
}
其中的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 例如
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.例如第一项,你要写成 “请选择” 的话 设置
相应的绑定方法为:
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("");
}
}
取消按钮也是同样的情况
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 = "感谢您使用 晓车--xche.cc.to!
" +
" 请点击以下确认连接,以完成身份验证:
"
+ " http://xiaoche219.ushost19.idcys.com/tiaozhuan.aspx?spring="+DataHelp.Encrypt(name,"alsges12")+"&summer="+DataHelp.Encrypt(email,"alsges12") +
"
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="";
}
else {
event.returnValue = false;
document.getElementById(list[1]).innerHTML = "Email 格式错误!";
return false;
}
}