none
请各位高手们指点一下,在gridview中按回车自动到下一个 textbox的问题(C#) RRS feed

  • 问题

  •  在GridView 中,有一个控件为TExtbox,手动读取数据源后,分页显示,在每一页中录完第一个textbox,按下回车键后,怎么样能实现GRIDVIEW的下一行的textbox处于编辑状态,并且自动获得焦点??(用C#实现)

    111

    2012年3月27日 1:20

答案

  • 我试了,不管用呀


    111

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebCSharp.WebForm1" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" type="text/javascript"></script>
        <script>

        var index = 0;  //默认一开始
        var totalNum = 0;   //总共多少个TextBox…
        $(function () {
            $(":text:eq(0)").focus();   //默认第一个选中
            totalNum = $(":text").length;   //统计总共多少

            //绑定所有的textbox
            $(":text").keydown(function (e) {

                if (e.which == 13) {
                    if (index >= totalNum-1) {
                        index = 0;       //从头开始
                    }
                    else {
                        index++;
                    }

                    //选中下一个
                    $(":text:eq(" + index + ")").focus();
                }
            });
        });

        </script>
    </head>
    <body>
        <form id="form1" runat="server">
           
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True">
                <Columns>
                    <asp:TemplateField HeaderText="我的日期">
                        <ItemTemplate>
                             <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Id") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    namespace WebCSharp
    {
        public partial class WebForm1 :Page
        {
            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    GridView1.DataSource = new[] { new { Id = 1 }, new { Id = 2 }, new { Id = 3 }, new { Id = 4 }, new { Id = 5 }, new { Id = 6} };
                    GridView1.DataBind();
                }
            }
           
        }
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月27日 8:32
  • 我的问题解决了,谢谢各位了!

    111

    • 已标记为答案 初学.net 2012年4月3日 6:59
    2012年4月3日 6:59

全部回复

  • 或許你可以參考這篇文章。

    http://forums.asp.net/t/1771419.aspx/1


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月27日 1:59
  • 我试了,不管用呀


    111

    2012年3月27日 7:50
  • 我试了,不管用呀


    111

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebCSharp.WebForm1" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" type="text/javascript"></script>
        <script>

        var index = 0;  //默认一开始
        var totalNum = 0;   //总共多少个TextBox…
        $(function () {
            $(":text:eq(0)").focus();   //默认第一个选中
            totalNum = $(":text").length;   //统计总共多少

            //绑定所有的textbox
            $(":text").keydown(function (e) {

                if (e.which == 13) {
                    if (index >= totalNum-1) {
                        index = 0;       //从头开始
                    }
                    else {
                        index++;
                    }

                    //选中下一个
                    $(":text:eq(" + index + ")").focus();
                }
            });
        });

        </script>
    </head>
    <body>
        <form id="form1" runat="server">
           
        <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True">
                <Columns>
                    <asp:TemplateField HeaderText="我的日期">
                        <ItemTemplate>
                             <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Id") %>'></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        </form>
    </body>
    </html>
    namespace WebCSharp
    {
        public partial class WebForm1 :Page
        {
            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    GridView1.DataSource = new[] { new { Id = 1 }, new { Id = 2 }, new { Id = 3 }, new { Id = 4 }, new { Id = 5 }, new { Id = 6} };
                    GridView1.DataBind();
                }
            }
           
        }
    }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月27日 8:32
  •  protected void Page_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < kscjlr.Rows.Count - 1; i++)
            {
                TextBox curTexbox = kscjlr.Rows[i].FindControl("wydfbd") as TextBox;
                TextBox nexTextbox = kscjlr.Rows[i + 1].FindControl("wydfbd") as TextBox;
                curTexbox.Attributes.Add("onkeypress", "return clickEnter('" + nexTextbox.ClientID + "', event");
            }
            if (!Page.IsPostBack)
            {
              
              
                Bindstust();
            } 
    private void Bindstust()
        {
            int stun = 0;
            SqlDataReader dr = null;
            DataSet ds = new DataSet();
            int i = 0;
            dr = kcxz.Getstn(ksmtid);
            ds = kcxz.Getstucj(ksmtid, Int32.Parse(dpkc.SelectedValue.ToString()));
            if (dr.Read())
            {
                stun = Int32.Parse(dr["n"].ToString());
            }
            //kscjlr.PageCount = stun;
            kscjlr.PageSize = stun;
            kscjlr.DataSource = ds;
            
            kscjlr.DataBind();
            kscjlr.Focus();
            //TextBox box = (TextBox )
       kscjlr.FindControl("wydf");
            //box.Focus();
        }


     <asp:GridView ID="kscjlr" Width="100%" runat="server" AutoGenerateColumns="False"  
    					BorderColor="#C04000" BorderWidth="1px" BackColor="White"   OnRowCommand="kscjlr_rowcommand"
    					 OnPageIndexChanging="kscjlr_pageindexchageing" OnRowDataBound ="kscjlr_rowdatabound"
    					CellPadding="4" AllowPaging="True" 	AccessKey="y"     DataKeyNames ="cjid" ShowFooter="True" OnRowUpdating ="kscjlr_rowupdating" PageSize="4">
    					<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
    					<SelectedRowStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66" BorderColor="CornflowerBlue" />
    					<RowStyle ForeColor="#330099" BackColor="White" BorderColor="CornflowerBlue" BorderStyle="Solid"/>
    					<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" CssClass="GbText" BackColor="#C04000"> </HeaderStyle>	
    				<Columns>
    				   <asp:TemplateField HeaderText="学生信息">
    						<ItemTemplate>
                                <%#DataBinder.Eval(Container.DataItem,"ksmtnj") %>   <%#DataBinder.Eval(Container.DataItem,"zwh") %>   <%#DataBinder.Eval(Container.DataItem,"stukh") %>  <%#DataBinder.Eval(Container.DataItem,"stuname") %> 
    						</ItemTemplate>
    						<ItemStyle HorizontalAlign="Center" />
    					</asp:TemplateField>
    					<asp:TemplateField HeaderText="试题学科">
    						<ItemTemplate>
    							<%#DataBinder.Eval(Container.DataItem,"ksmtxk") %>
    						</ItemTemplate>
    						<ItemStyle HorizontalAlign="Center" />
    					</asp:TemplateField>
    					<asp:TemplateField HeaderText="试题号">
    						<ItemTemplate>							
    							<%#(int)DataBinder.Eval(Container.DataItem,"stusth")==100? "总分":DataBinder.Eval(Container.DataItem,"stusth") %>
    						</ItemTemplate>
    						<ItemStyle HorizontalAlign="Center" />
    					</asp:TemplateField>
    				
    					<asp:TemplateField HeaderText="得分">
    					  
    						<ItemTemplate>
    							<asp:TextBox ID="wydfbd" runat="server" Width="25px"  Text='<%#DataBinder.Eval(Container.DataItem,"stufs1") %>'  OnTextChanged="TextBox_TextChanged">					
    							</asp:TextBox>							
    							<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="必须输入整数!" ValidationExpression="\d+"
                                 ControlToValidate="wydfbd"> </asp:RegularExpressionValidator>	
                                
    </ItemTemplate>			 
     <ItemStyle HorizontalAlign="Center" />
    </asp:TemplateField>
                        
    					
    </Columns>
    <AlternatingRowStyle BorderColor="Crimson" />
                    <EditRowStyle Wrap="False" />
                    <PagerSettings Mode="NextPrevious" NextPageText="下一个" PageButtonCount="2" PreviousPageText="上一个" />
                   
    </asp:GridView>
                    <asp:Button ID="UpdateButton" runat="server" onclick="UpdateButton_Click" 
            Text="确定" />

     

    这是我源文件中的一部分,大家帮忙看一下吧


    111

    2012年3月29日 1:52
  • 你没有判断按下什么键,就一个onkeypress什么键按下都有反映,或许还有其它错误……我建议你参考我的代码,我测试过了丫。谢谢!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月29日 1:58
  • 我的问题解决了,谢谢各位了!

    111

    • 已标记为答案 初学.net 2012年4月3日 6:59
    2012年4月3日 6:59
  • 我的问题解决了,谢谢各位了!

    111

    可以分享以下你的答案吗?谢谢了!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月3日 12:38