日期:2014-05-19  浏览次数:20472 次

gridview中的javascript问题.
请教个问题.
我有个gridview,里面有四个模板列.当点击每一行的 "编辑 "按钮的时候,这一行的三个模板列由label变成textbox.我将第三个textbox做了个onfocus,当这第三个textbox获得焦点的时候,将前两个textbox的数值相乘.请问这个怎么做啊.

      protected   void   GridView1_RowEditing(object   sender,   GridViewEditEventArgs   e)
        {
                GridView1.EditIndex   =   e.NewEditIndex;
                TextBox   t1   =   (TextBox)GridView1.Rows[e.NewEditIndex].FindControl( "heji ");
                t1.Attributes.Add( "onfocus ",   "javascript:var   obj   =   window.event.srcElement;obj.value   = "   +   Convert.ToInt32(((TextBox)GridView1.Rows[e.NewEditIndex].FindControl( "shuliang ")).Text)*   Convert.ToDecimal(((TextBox)GridView1.Rows[e.NewEditIndex].FindControl( "price ")).Text)*   +   "; ");
        }

我这样做,它好像会在变成textbox的时候就直接算出 "合计 "的数,然后在这个文本框得到焦点的时候直接付上,而不是我在点了合计文本框时,再将这两个相乘.请问这个应该怎么写.
如果不用这种方法还有其它方法可以完成这个功能吗?

------解决方案--------------------
给文本框设置焦点事件
使用javascript中的this.parentNode.parentNode.cells[index].childNode[index]获取其它列的文本框对象,不就可以了!
------解决方案--------------------
在rowdatabound事件里面写类似你那样的代码

建议你将这个js方法放在前台页面!
然后后台事件把控件的clientid传给js方法就可以使用document.getElementById(id)来定位控件并进行数学运算
------解决方案--------------------
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{

}
}

在RowDataBound里加事件。