界面如图:
需要实现功能:双击Gridview,获取当前行所在数据,把数据带到信息区域,同时信息区域新增显示为编辑。
实现方法1:双击Gridview后,带出id并且添加双击事件window.location.href=当前页面url?id=当前数据的id。
然后PageLoad事件里判断是否有request.QuerryString["id"]是否为null,并作出相应判断。
缺点:页面有刷新,效率低。用户体验差。
方法2:(注:示例为三层机构,数据层代码很简单。不贴出来了。)
首先在页面添加一个HiddenField隐藏控件,改id为hfState。如图:
信息区域添加名为lblState的Label控件。
房间文本框名为txtNo,
房间类型下拉列表为ddltype。
数据为手动添加:(数据库中用int保存)
<asp:DropDownList ID="ddltype" runat="server">
<asp:ListItem Value="0">-请选择-asp:ListItem>
<asp:ListItem Value="1">单人间asp:ListItem>
<asp:ListItem Value="2">标准间asp:ListItem>
<asp:ListItem Value="3">商务间asp:ListItem>
<asp:ListItem Value="4">总统套房asp:ListItem>
asp:DropDownList>
为实现页面无刷新,采用JavaScript。
function setValue(num,id,type)
{
document.getElementById("lblState").innerText="编辑";
document.getElementById("txtNo").value=num;
//给隐藏域赋值为当前id
document.getElementById("hfState").value=id;
var ddl= document.getElementById("ddltype");
ddl.value=type;
}
num为房间编号,id为主键,type为类型value。
主要部分代码:
protected void gvRoomInfo_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//设置房间类型由数字显示为中文
Label lbltype = e.Row.FindControl("lblType") as Label;
e.Row.Attributes.Add("ondblclick", "setValue('" + e.Row.Cells[0].Text + "'," + gvRoomInfo.DataKeys[e.Row.RowIndex][0] + ","+lbltype.Text+")");
//房间类型判断代码略。。。
}
}