我在如下的帖子提出的问题:在GridView控件中,如何双击或单击一行就可以编辑此行的数据,已经得到解决了:
http://topic.csdn.net/u/20080321/19/7bcd47aa-a30f-49b9-8f5f-06a2858f69a8.html
不过又产生一个问题了,双击修改完,要点击此行的“保存”按钮才能保存,能不能在双击其它行的时候,系统检测是否此行已经发生变化,如果是则自动保存,否则直接转入其它行的编辑状态。这样操作起来比较人性化。
http://topic.csdn.net/u/20080321/19/7bcd47aa-a30f-49b9-8f5f-06a2858f69a8.html
不过又产生一个问题了,双击修改完,要点击此行的“保存”按钮才能保存,能不能在双击其它行的时候,系统检测是否此行已经发生变化,如果是则自动保存,否则直接转入其它行的编辑状态。这样操作起来比较人性化。
解决方案 »
- 计算gridview中控件的值
- 如何让程序歇一会?
- 模板解析问题求助。。。
- ASP.net 的GridView的各种事件中其中一行的ID和索引值
- 分页的DAL中的一个简单问题
- 求教 js 验证datalist 中 textBox 值
- 整合 asp和asp.net问题
- 但点击编辑时出现System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围的错误.
- ~~~~Grid中Checkox如何知道是否选种~~~
- 请问怎样把C:INETPUB下的MAILROOT的QUEUE中的邮件真正发出去!!
- gridview没有数据的时候,如何显示header和foot,谢谢了!
- asp.net(c#)中如何实现每个叶子节点都绑定一个文本框的treeview?
那个事件的名称我也不记得了,你自己去找找
应该都可以实现,如果想要页面不刷新,使用Ajax,如果不考虑,不用Ajax也是可以的
不知道这样的效果lz喜欢不?
可以参考下
<%@ Page Language="C#" debug="true"%>
<%@ Import Namespace="System.Data" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
bool isAJAXPost = IsAJAXPost();
if (isAJAXPost)//是
{
Response.Write("AJAX PostBack Data\nName:" + Request.Form["name"]
+ "\nNumber:" + Request.Form["number"]
+ "\nServerTime:" + DateTime.Now.ToString());//提供给ajax对象使用的信息
Response.End();//结束下面程序的执行
}
if (!IsPostBack)
{
GridView1.DataSource = BuildGridViewDataSource();
GridView1.DataBind();
}
}
/// <summary>
/// 是否是ajaxpost回来的数据,并根据数据更新表什么的
/// </summary>
/// <returns>是否是ajax提交的数据</returns>
private bool IsAJAXPost()
{
string Up = Request.Form["up"];
if (Up == "up")//此参数执行是否是ajax post回来的
{
string Name = Request.Form["name"];
string Number = Request.Form["Number"];
//下面可以执行你的更新操作什么的
//======
//======
return true;//返回
}
return false;
}
/// <summary>
/// 用来做例子中的数据源
/// </summary>
/// <returns></returns>
private DataTable BuildGridViewDataSource()
{
DataTable dt = new DataTable();
dt.Columns.Add("Number");
dt.Columns.Add("Name"); DataRow dr = dt.NewRow();
dr["Number"] = "1000";
dr["Name"] = "张三";
dt.Rows.Add(dr); dr = dt.NewRow();
dr["Number"] = "1001";
dr["Name"] = "李四";
dt.Rows.Add(dr); return dt;
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//实现单击时确发编辑
//e.Row.Attributes.Add("onclick", "OnClickedRow('" + e.Row.RowIndex + "');");
//实现双击时确发编辑
e.Row.Attributes.Add("ondblclick", "OnClickedRow(this);");
}
}
</script>
<html>
<head></head>
<body>
<form runat="server">
<asp:GridView Width="500" ID="GridView1" runat="server" AutoGenerateColumns="False"
OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="Number" HeaderText="编号" />
<asp:BoundField DataField="Name" HeaderText="姓名" />
</Columns>
</asp:GridView> </form>
<script type="text/javascript">
var FocusTR=null;
function createObj()
{
var o=null;
if(typeof(XMLHttpRequest)!="undefined") return new XMLHttpRequest();//ie7和w3c
if(window.ActiveXObject)//ie6-
{
var MSXML=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHTTP"];
for(var i=0;i<MSXML.length;i++)
{
try
{
o= new ActiveXObject(MSXML[i]);
return o;
}
catch(e)
{}
}
}
}
function OnClickedRow(tr)
{
if(FocusTR==tr)return;//已经获取编辑状态后再双击退出
if(FocusTR!=null)//ajax提交上次编辑行的数据
{
var txt1=FocusTR.cells[0].getElementsByTagName("input")[0].value;
var txt2=FocusTR.cells[1].getElementsByTagName("input")[0].value;
var data="up=up&name="+escape(txt1)+"&number="+escape(txt2);
PostData(data);//启动ajax对象来post数据回服务器提供更新
//=========还原状态
FocusTR.cells[0].innerHTML=txt1;
FocusTR.cells[1].innerHTML=txt2;
}
var c1=tr.cells[0].innerHTML;
var c2=tr.cells[1].innerHTML;
//更换为text
tr.cells[0].innerHTML="<input type='text' value='"+c1+"'/>";
tr.cells[1].innerHTML="<input type='text' value='"+c2+"'/>";
FocusTR=tr;//更改行
}
function PostData(data)
{
var o=createObj();
if(o)
{
o.onreadystatechange=function()
{
if(o.readyState==4)//已经返回
{
if(o.status==200)//成功返回
alert(o.responseText);
else
alert("发生错误!");
}
}
//aspx文件名改后注意修改这个
o.open("post","test.aspx",true);
o.setRequestHeader("content-type","application/x-www-form-urlencoded");//post时需要设置此头
o.send(data);//发送请求和数据
}
else
alert("创建对象失败!");
}
</script>
</body>
</html>