DataGrid 点编辑后,怎么让这行的第一个文本框获得焦点? asp.net下DataGrid 点编辑后,怎么让这行的第一个文本框获得焦点?急, 解决200分相送!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在DataGrid1_ItemDataBound里写了:m_1=(TextBox)e.Item.Cells[2].Controls[0];m_1.Width=Unit.Pixel(70);//m_1.TabIndex=1;//Response.Write("<script language='javascript'>javascript:document.Form1.DataGrid1.m_1.focus();</script>");//Page.RegisterClientScriptBlock("getfocus","<script language=javascript>function getfocus(){"+ m_1.ClientID +".focus(); };</script>");上面两个方法好像都不可以,说没有这个控件.谁帮我看哪里写错了,谢谢了 public void SetFocus(System.Web.UI.Control ctrl){ string s="<SCRIPT language=javascript>document.getElementById('" + ctrl.ID + "').focus() </SCRIPT>"; RegisterStartupScript("focus",s);} 我现在m_1=(TextBox)e.Item.Cells[2].Controls[0];是不是SetFocus(m_1);写在DATAGRID的哪个事件里就可以了呢? 写在DataGrid的EditCommand里或者是“DataGrid 点编辑后”所触发的那个事件里使用RegisterStartupScript 注册脚本,因为RegisterClientScript脚本注册时页面控件对象还没生成使用你上面的那段程序就行了m_1=(TextBox)e.Item.Cells[2].Controls[0];Page.RegisterStartupScript ("getfocus", "<script language=javascript>"+ m_1.ClientID +".focus();</script>"); 写在DataGrid的EditCommand执行m_1=(TextBox)e.Item.Cells[2].Controls[0];时不报错,private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { this.DataGrid1.EditItemIndex=e.Item.ItemIndex; DataGridLoad(); TextBox m_1; m_1=(TextBox)e.Item.Cells[3].Controls[0]; Page.RegisterStartupScript ("getfocus", "<script language=javascript>"+ m_1.ClientID +".focus();</script>"); DataGridLoad(); } System.Web.UI.WebControls.DataGridCommandEventArgs e这个 e 只能得到 Label ,没有 TextBox okwinds(梦无忧) 用this.focus()这个怎么用, 能说详细点吗? System.Web.UI.WebControls.DataGridCommandEventArgs e这个 e 只能得到 Label ,没有 TextBox--------------可能是因为EditCommand事件触发时还没有重新生成datagrid,你可以这样做:public class WebForm1 : System.Web.UI.Page{ private DatagridItem item;//用来存放点击的时那一行的编辑事件 private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { item=e.Item;//保存触发事件的那一行 DataGridLoad(); } protected override void CreateChildControls()//重载CreateChildControls函数 { base.CreateChildControls (); TextBox m_1; m_1=(TextBox)item.Cells[3].Controls[0]; Page.RegisterStartupScript ("getfocus", "<script language=javascript>"+ m_1.ClientID +".focus();</script>"); } } Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error: Line 102: base.CreateChildControls (); Line 103: TextBox m_1=new TextBox(); Line 104: m_1=(TextBox)item.Cells[3].Controls[0]; Line 105: Page.RegisterStartupScript ("getfocus", Source File: testgrid.aspx.cs Line: 104 试试:m_1=(TextBox)item.Cells[3].Controls[1];加断点,在命令窗口输入:(TextBox)item.Cells[3].Controls.Count 看看共有几个Control,看看每个Control的类型,在强制类型转换。 水晶报表里内容转了270在CrystalReportViewer里显示没转动 我应该用哪个控件? ModalPopupExtender触发容器里的控件事件无法触发!!请教 关于发送邮件 能否在按钮属性里根据条件的不同弹出不同内容的对话框内容! 兄弟们问个sql语句 跪寻网络游戏在线充值接口 域名查询该如何做 .net怎么做基于整个域森林的AD认证 Crystal report 连接Oracle的问题 这样的代码有什么不对吗? 关于子页面也父页面的问题<挺简单的> 在线等 一看到结果就给分
m_1=(TextBox)e.Item.Cells[2].Controls[0];
m_1.Width=Unit.Pixel(70);
//m_1.TabIndex=1;
//Response.Write("<script language='javascript'>javascript:document.Form1.DataGrid1.m_1.focus();</script>");
//Page.RegisterClientScriptBlock("getfocus","<script language=javascript>function getfocus(){"+ m_1.ClientID +".focus(); };</script>");
上面两个方法好像都不可以,说没有这个控件.
谁帮我看哪里写错了,谢谢了
{
string s="<SCRIPT language=javascript>document.getElementById('" + ctrl.ID + "').focus() </SCRIPT>";
RegisterStartupScript("focus",s);
}
m_1=(TextBox)e.Item.Cells[2].Controls[0];
是不是
SetFocus(m_1);
写在DATAGRID的哪个事件里
就可以了呢?
使用RegisterStartupScript 注册脚本,因为RegisterClientScript脚本注册时页面控件对象还没生成
使用你上面的那段程序就行了
m_1=(TextBox)e.Item.Cells[2].Controls[0];
Page.RegisterStartupScript ("getfocus",
"<script language=javascript>"+ m_1.ClientID +".focus();</script>");
执行m_1=(TextBox)e.Item.Cells[2].Controls[0];
时不报错,
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
DataGridLoad(); TextBox m_1;
m_1=(TextBox)e.Item.Cells[3].Controls[0];
Page.RegisterStartupScript ("getfocus",
"<script language=javascript>"+ m_1.ClientID +".focus();</script>");
DataGridLoad();
}
用this.focus()这个怎么用, 能说详细点吗?
这个 e 只能得到 Label ,没有 TextBox
--------------
可能是因为EditCommand事件触发时还没有重新生成datagrid,你可以这样做:
public class WebForm1 : System.Web.UI.Page
{
private DatagridItem item;//用来存放点击的时那一行的编辑事件
private void DataGrid1_EditCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
item=e.Item;//保存触发事件的那一行
DataGridLoad();
}
protected override void CreateChildControls()//重载CreateChildControls函数
{
base.CreateChildControls ();
TextBox m_1;
m_1=(TextBox)item.Cells[3].Controls[0];
Page.RegisterStartupScript ("getfocus",
"<script language=javascript>"+ m_1.ClientID +".focus();</script>");
} }
Source Error:
Line 102: base.CreateChildControls ();
Line 103: TextBox m_1=new TextBox();
Line 104: m_1=(TextBox)item.Cells[3].Controls[0];
Line 105: Page.RegisterStartupScript ("getfocus",
Source File: testgrid.aspx.cs Line: 104
m_1=(TextBox)item.Cells[3].Controls[1];
加断点,在命令窗口输入:(TextBox)item.Cells[3].Controls.Count 看看共有几个Control,看看每个Control的类型,在强制类型转换。