我在Datalist1里放置了一个TextBox模板列
已经实现了在对某行的TextBox输入数字后通过DataList1_ItemCommand()对数字进行验证现在的场景是这样的:
1.在A行的TextBox里入数字
2.鼠标点B行的TextBox,使A行的TextBox失去焦点从而调用DataList1_ItemCommand()启动验证
3.无论输入的数字是否正确,验证完毕后焦点始终会回到A行的TextBox上我希望第3步是这样的:
3.如果验证通过,则焦点保留在B行的TextBox上;验证失败则焦点回到A行的TextBox上
请高手赐教!

解决方案 »

  1.   

    给你写个示例:test.aspx
    ---------------------------------------------------
    <%@Page Language="C#"%>
    <%@Import Namespace="System.Data"%><script runat="server">
    void Page_Load(object src,EventArgs e){
    if(!Page.IsPostBack){
    BindData();
    }
    }void BindData(){
    DataTable table=(DataTable)Cache["mytable"];
    if(table==null){
    table=new DataTable();
    DataColumn column=new DataColumn("序号",typeof(int));
    column.AutoIncrement=true;
    column.AutoIncrementSeed=1;
    column.Unique=true;
    table.Columns.Add(column);
    table.Columns.Add(new DataColumn("姓名",typeof(string)));
    table.Columns.Add(new DataColumn("住址",typeof(string)));
    table.Columns.Add(new DataColumn("分数",typeof(int)));
    DataRow row=table.NewRow();
    row["姓名"]="张三";
    row["住址"]="陕西省吴旗县";
    row["分数"]=22;
    table.Rows.Add(row);
    row=table.NewRow();
    row["姓名"]="李四";
    row["住址"]="陕西省延安市";
    row["分数"]=26;
    table.Rows.Add(row);
    table.PrimaryKey=new DataColumn[]{column};
    Cache["mytable"]=table;
    }
    dlist.DataSource=table;
    dlist.DataBind();
    }void BindDataItem(object src,DataListItemEventArgs e){
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
    TextBox box=e.Item.FindControl("txtbox") as TextBox;
    LinkButton btn=e.Item.FindControl("btn") as LinkButton;
    if(box!=null&&btn!=null){
    box.Attributes.Add("onchange",this.GetPostBackEventReference(btn));
    }
    }
    }void UpdateTable(object src,DataListCommandEventArgs e){
    DataTable table=(DataTable)Cache["mytable"];
    TextBox box=e.Item.FindControl("txtbox") as TextBox;
    if(box!=null){
    table.Rows[e.Item.ItemIndex]["分数"]=int.Parse(box.Text);
    Cache["mytable"]=table;
    BindData();
    }
    }
    </script>
    <HTML>
    <HEAD>
    <TITLE> Webdiyer制造:) </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Webdiyer">
    </HEAD><BODY>
    <form runat="server">
    <asp:DataList runat="server" id="dlist" OnItemDataBound="BindDataItem" onUpdateCommand="UpdateTable">
    <ItemTemplate>
    姓名:<%#DataBinder.Eval(Container.DataItem,"姓名")%>&nbsp;&nbsp;
    分数:<asp:TextBox runat="server" id="txtbox" Text='<%#DataBinder.Eval(Container.DataItem,"分数")%>'/><br/>
    <asp:LinkButton Text="Update" CommandName="Update" runat="server" id="btn" visible=false/>
    </ItemTemplate>
    </asp:DataList>
    </form>
    </BODY>
    </HTML>
      

  2.   

    goody9807(),谢谢你的回复
    这一步我已经实现了,当然也是看了你在另外一个帖子的同样的回复后学会的 :P
    我现在要解决的是TextBox的焦点切换问题
    请你帮我想想
      

  3.   

    已经实现了在对某行的TextBox输入数字后通过DataList1_ItemCommand()对数字进行验证
    -----------------------------------为什么要通过DataList1_ItemCommand()对数字进行验证通过js验证多好啊 也不用刷新页面
      

  4.   

    我现在要实现的东西类似于csdn的结贴页面
    100分的帖子如果有10个人回复,那么帖主在给分时
    在没个回帖的TextBox输入分数时,要:
    1.通过RegularExpressionValidator在客户端判断输入的东东是否有效
    2.在DataList1_ItemCommand()中计算剩余分值来提示帖主可继续分配的分数
      

  5.   

    而且如果帖子分数没分配完或这分配值超出,我都可以在DataList1_ItemCommand()中判断出来,并给帖主相应的提示!