当我执行查询按钮后,如果我的datagrid中有两条以上的信息,为什么我的鼠标指向它的时候,始终是鼠标指向第二行开始才改变背景色,指向第一行没有反应,并且我双击时为什么没有反应,弹不出来新页面??恳请大虾帮忙解决,谢谢!~ 
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{

if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.EditItem || e.Item.ItemType==ListItemType.SelectedItem || e.Item.ItemType==ListItemType.AlternatingItem)
{
string a1 = "";
for(int i=0;i<this.DataGrid1.Items.Count;i++)
{
a1 = this.DataGrid1.Items[i].Cells[0].Text;
//改变鼠标所到行的背景色
e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='E9ECF2'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");

e.Item.Attributes["ondblclick"] = "navigate('addworker.aspx'?a1=" + a1 + "','','')";
}
}
}

解决方案 »

  1.   

    e.Item.Attributes
    这个加载的位置错了。
    应该在页面加载的时候就把这个加载出来。
    你这样写,是满足条件后才e.Item.Attributes
    这样的话你就得点两次才出现你的效果!
    不知道能明白么?
      

  2.   

    e.Item.Attributes.Add("onmouseover","currentcolor=this.style.backgroundColor;this.style.backgroundColor='E9ECF2'");
    e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=currentcolor");

    e.Item.Attributes["ondblclick"] = "navigate('addworker.aspx'?a1=" + a1 + "','','')";
    这三句是动态增加的事件。
    他的原理是在他所在的过程运行的时候动态的生成html代码。
    按照你的写法。就要执行一次你上面的过程,才会出现你的代码,所以出现你的问题。单独写个过程
     Sub myDataGrid_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
    //这加入你要的e.Item.Attributes事件!
               End Sub
    这个过程在DataGrid的ItemCreated时间时执行!
      

  3.   

    webabc(网博) 谢谢,第一行也能被改变背景色了,但又出现一个新问题,就是我无论点击那一行,在新页面中textbox的值都是当前datagrid中所有行减一的那一行的值,我知道是这个循环程序有点问题,但不知道那里出问题,你能帮我改改吗?
    string a1 = "";
    for(int i=0;i<this.DataGrid1.Items.Count;i++)
    {
      a1 = this.DataGrid1.Items[i].Cells[1].Text;
      Session["ygid"]=a1;
    }
    我把datagrid值中的关键字传值给a1,然后在新页面用session接收,用它去数据库中查找相应的所有字段,再邦定到相应的textbox中,但不知道为什么总是当前datagrid中所有行减一的那一行的值,谢谢你的指教!~
      

  4.   

    我调试没有错误,只是每一次弹出新页面中的值都是datagrid当前所有行数减一的那一行的值啊,郁闷死了,现在
      

  5.   

    for(int i=0;i<this.DataGrid1.Items.Count;i++)
    {
      a1 = this.DataGrid1.Items[i].Cells[1].Text;
      Session["ygid"]=a1;
    }这个语句,每次循环,把第i行的值赋给Session["ygid"],循环完了,最后Session["ygid"] 就是所有行数减一的那一行的值啊
    用select 或者 edit 什么的阿
    另外楼主,可否跟我联系,给我讲一下你的代码,我同时急需。
      

  6.   

    楼主 跟我联系一下  谢谢啦   [email protected]  [email protected]
      

  7.   

    wanggh1102(青青)没弄明白你说的:用select 或者 edit 什么的阿???
    加我QQ64795629
      

  8.   

    虾米没有人告诉我啊??那位大虾能帮我解决这个问题啊,为什么我取的值全部都是datagrid中当前所有行的倒数第二行的值啊??
      

  9.   

    在控件绑定之后立即循环给每行添加脚本
    //循环对表格行做脚本,点击弹出新窗口
    int i=0;
    int mycount = DataGrid1.Items.Count;
    string ygid = "";
    for(i=0;i<mycount;i++)
    {
    ygid = DataGrid1.DataKeys[i].ToString();
    DataGrid1.Items[i].Attributes.Add("onclick","window.open('updatawage.aspx?ygid=" + ygid + "','','');");
    }