当我按下查询按钮显示出数据后激发这个事件(让鼠标变色,且双击任何一行就转移到一个新页面)
private void DataGrid1_ItemCreated(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)
{

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('updatawage.aspx')";//双击datagrid中任何一行转移到该新的页面。
}
}点我点击任何一行信息后激发该事件:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
string a1 =""; for(int i=0;i<this.DataGrid1.Items.Count;i++)
{
        a1 =this.DataGrid1.Items[i].Cells[1].Text;
Session["ygid"]=a1;
}
}
(在新页面中我确实能接收到session值(也就是cell[1]的值)。。问题在于,当我按下查询按钮后,我的datagrid中显示出来的信息如果有二条以上的话,比如有三条信息1,2,3(ygid为001,002,003),无论我点击1这一行,还是点击2这一行,或者点击3这一行,那么在新页面中的session值始终是第3这一行的ygid值。
那位大虾能帮我改一下上面的代码,怎么才能实现我点击那一行,那么取出的ygid就是被点击那一行的ygid。谢谢!~

解决方案 »

  1.   

    楼主,你的代码很明显不正确。Session值不应该在ItemDataBound函数中赋予,而应该在click事件发生后赋予啊。
      

  2.   

    用select事件就可以了,新建一个选择列,隐藏掉,然后用:
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex>=0)
    {
    e.Item.Attributes.Add("OnClick",Page.GetPostBackClientEvent(e.Item.Cells[0].Controls[0],String.Empty)); 
    }
    } 之后在
    private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    string a1 =e.Item.Cells[1].Text;
    Session["ygid"]=a1;
    }
      

  3.   

    在控件绑定之后立即循环给每行添加脚本
    //循环对表格行做脚本,点击弹出新窗口
    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 + "','','');");
    }