在使用DataGrid控件中是修改功能修改记录后,当保存后页面要重新加载,有什么办法将焦点移到刚修改的那条记录吗??

时间:2022-11-17 22:00:30
在使用DataGrid控件中是修改功能修改记录后,当保存后页面要重新加载,有什么办法将焦点移到刚修改的那条记录吗??
就是DataGrid重新加载后将焦点移到刚修改的地方??

31 个解决方案

#1


顶,我也遇到这样的问题
只是移到刚修改过的那条记录可以用.EditItemIndex =index
不过要把修改过的textbox作为焦点就不知道怎么用了

#2


哥们..这个我用过.但我写出来的代码一定是垃级,因太费资源...

#3


如果不修改主键字段,则不会出现这种情况呀
我之前有用过这个,思路是这样的:(需自己定义两个方法)
1、在保存记录时,先记录当前修改行的key[](因为有可多是多字段)
object[] primaryKey,keyValue;
//设置主键主段及其值
2、保存OK,且重新绑定数据后,要执行一个自定义方法:
//方法一
public void SetupDataGridCurrentRowIndexOrPageIndex(DataGrid myDataGrid,object[] primaryKeyField,object[] primaryKeyValue)
{
    A:根据key值,返回其在DataView中的当前记录号;//方法二
    B:然后根据此记录号及DataGrid的PageSize,计算出此key值在DataGrid中出现的面号及行号
说明:以上方法,不管是否有排序,在增加/修改后,都可以定位到key所在的页及行;
}

具体方法自己想一下,这些都是我自己想出来的,没有人帮我,也没有人帮我,实在不行,发信息给我,告诉你具体的代码

#4


void Page_Load(Object sender, EventArgs e)
{
   this.SmartNavigation = true;
}

#5


还是不很明白,有详细一点的吗??

#6


把思路及框架都給你了,還不夠詳細嗎?

#7


不错,学习

#8


mark

#9


mark

#10


做个记号,以后用得着。

#11


设置 smartNavigation=true 是个“整体”的解决方案(解决了很多问题,包括页面回发过程焦点保持问题)。

如果专门设置焦点到一个自己指定的对象(通用方法),基本上可以这样写:

private void SetFocus(Control Ctr){
  string s=@"<script language=javascript>
    {0}.focus();
    </script>";
  Ctr.Page.RegisterStartupScript("setPageFocus",
    string.Format(s,Ctr.ClientID));
}

在程序中,如果你处理DataGrid的编辑行事件之后,如果定义焦点,大概应该可以这样:
SetFocus(e.item);

#12


我没有测试。可许,s写成一下这个形式兼容(浏览器)性更好一点:

string s=@"<script language=javascript>
    window.document.all['{0}'].focus();
    </script>";

#13


问题还是没解决啊
我是这么写的
先定义
<style>
DIV#div-datagrid { OVERFLOW: auto; WIDTH: 102%; SCROLLBAR-BASE-COLOR: #ffeaff; HEIGHT: 520px }
TD.locked { BORDER-RIGHT: silver 1px solid; ; LEFT: expression(document.getElementById("div-datagrid").scrollLeft-0.1); CURSOR: default; POSITION: relative }
TH { BORDER-RIGHT: silver 1px solid; FONT-WEIGHT: bold; FONT-SIZE: 14px; Z-INDEX: 10; CURSOR: default; COLOR: white; POSITION: relative; ; TOP: expression(document.getElementById("div-datagrid").scrollTop-2); BACKGROUND-COLOR: navy; TEXT-ALIGN: center }
TH.locked { Z-INDEX: 99 }
.GridRow { BACKGROUND-COLOR: #ffffff }
.GridAltRow { BACKGROUND-COLOR: #eeeeee }
</style>
然后 再固定DataGrid前面几列,并且还要分页,每页20条记录
但是在用了大家的方法后,发现都不可以实现我要的效果,不知道是我的方法不对还是怎么了
有谁可以帮我解决一下吗??

#14


要不使用模版列吧,以下是一个例子,或许对你有帮助。
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
        dim mytext1,mytext2 as textbox
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            mytext1= CType(e.Item.Cells(10).FindControl("textbox16"), TextBox)
            mytext2= CType(e.Item.Cells(11).FindControl("textbox17"), TextBox)
            mytext.Attributes.Add("onblur", "document.getElementById('" & mytext2.ClientID & "').value=this.value;document.getElementById('" & mytext2.ClientID & "').focus();")  '当mytext1失去焦点时,对mytext2赋值,并使mytext2得到焦点.
        end if
end sub

#15


学习....

#16


learning

#17


自己顶

#18


救命啊

#19


没办法
自己顶啊

#20


不要
沉啊

#21


再顶

#22


if(!Page.IsPostBack)
{
  //初始化邦定
}

每次修改完毕再重新邦定,焦点没有变啊。

#23


不行啊
难道很难吗??

#24


郁闷啊

#25


用Aspnet2.0吧,已经解决了设定焦点的问题了

#26


但是我现在很急啊
有谁可以解决一下吗??

#27


http://lovecherry.cnblogs.com/archive/2005/05/17/157550.html

#28


还是不可以啊
有谁知道吗??

#29


#30


好的
我漫漫的等,不知道要等到什么时候

#31


终于可以了 
谢谢大家

#1


顶,我也遇到这样的问题
只是移到刚修改过的那条记录可以用.EditItemIndex =index
不过要把修改过的textbox作为焦点就不知道怎么用了

#2


哥们..这个我用过.但我写出来的代码一定是垃级,因太费资源...

#3


如果不修改主键字段,则不会出现这种情况呀
我之前有用过这个,思路是这样的:(需自己定义两个方法)
1、在保存记录时,先记录当前修改行的key[](因为有可多是多字段)
object[] primaryKey,keyValue;
//设置主键主段及其值
2、保存OK,且重新绑定数据后,要执行一个自定义方法:
//方法一
public void SetupDataGridCurrentRowIndexOrPageIndex(DataGrid myDataGrid,object[] primaryKeyField,object[] primaryKeyValue)
{
    A:根据key值,返回其在DataView中的当前记录号;//方法二
    B:然后根据此记录号及DataGrid的PageSize,计算出此key值在DataGrid中出现的面号及行号
说明:以上方法,不管是否有排序,在增加/修改后,都可以定位到key所在的页及行;
}

具体方法自己想一下,这些都是我自己想出来的,没有人帮我,也没有人帮我,实在不行,发信息给我,告诉你具体的代码

#4


void Page_Load(Object sender, EventArgs e)
{
   this.SmartNavigation = true;
}

#5


还是不很明白,有详细一点的吗??

#6


把思路及框架都給你了,還不夠詳細嗎?

#7


不错,学习

#8


mark

#9


mark

#10


做个记号,以后用得着。

#11


设置 smartNavigation=true 是个“整体”的解决方案(解决了很多问题,包括页面回发过程焦点保持问题)。

如果专门设置焦点到一个自己指定的对象(通用方法),基本上可以这样写:

private void SetFocus(Control Ctr){
  string s=@"<script language=javascript>
    {0}.focus();
    </script>";
  Ctr.Page.RegisterStartupScript("setPageFocus",
    string.Format(s,Ctr.ClientID));
}

在程序中,如果你处理DataGrid的编辑行事件之后,如果定义焦点,大概应该可以这样:
SetFocus(e.item);

#12


我没有测试。可许,s写成一下这个形式兼容(浏览器)性更好一点:

string s=@"<script language=javascript>
    window.document.all['{0}'].focus();
    </script>";

#13


问题还是没解决啊
我是这么写的
先定义
<style>
DIV#div-datagrid { OVERFLOW: auto; WIDTH: 102%; SCROLLBAR-BASE-COLOR: #ffeaff; HEIGHT: 520px }
TD.locked { BORDER-RIGHT: silver 1px solid; ; LEFT: expression(document.getElementById("div-datagrid").scrollLeft-0.1); CURSOR: default; POSITION: relative }
TH { BORDER-RIGHT: silver 1px solid; FONT-WEIGHT: bold; FONT-SIZE: 14px; Z-INDEX: 10; CURSOR: default; COLOR: white; POSITION: relative; ; TOP: expression(document.getElementById("div-datagrid").scrollTop-2); BACKGROUND-COLOR: navy; TEXT-ALIGN: center }
TH.locked { Z-INDEX: 99 }
.GridRow { BACKGROUND-COLOR: #ffffff }
.GridAltRow { BACKGROUND-COLOR: #eeeeee }
</style>
然后 再固定DataGrid前面几列,并且还要分页,每页20条记录
但是在用了大家的方法后,发现都不可以实现我要的效果,不知道是我的方法不对还是怎么了
有谁可以帮我解决一下吗??

#14


要不使用模版列吧,以下是一个例子,或许对你有帮助。
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
        dim mytext1,mytext2 as textbox
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            mytext1= CType(e.Item.Cells(10).FindControl("textbox16"), TextBox)
            mytext2= CType(e.Item.Cells(11).FindControl("textbox17"), TextBox)
            mytext.Attributes.Add("onblur", "document.getElementById('" & mytext2.ClientID & "').value=this.value;document.getElementById('" & mytext2.ClientID & "').focus();")  '当mytext1失去焦点时,对mytext2赋值,并使mytext2得到焦点.
        end if
end sub

#15


学习....

#16


learning

#17


自己顶

#18


救命啊

#19


没办法
自己顶啊

#20


不要
沉啊

#21


再顶

#22


if(!Page.IsPostBack)
{
  //初始化邦定
}

每次修改完毕再重新邦定,焦点没有变啊。

#23


不行啊
难道很难吗??

#24


郁闷啊

#25


用Aspnet2.0吧,已经解决了设定焦点的问题了

#26


但是我现在很急啊
有谁可以解决一下吗??

#27


http://lovecherry.cnblogs.com/archive/2005/05/17/157550.html

#28


还是不可以啊
有谁知道吗??

#29


#30


好的
我漫漫的等,不知道要等到什么时候

#31


终于可以了 
谢谢大家