本来对DataGrid行进行操作可以用e.items.cell[index],但今天经理说不能用index来进行查找,必须用绑定该列的字段名来查找,因为客户可能会要求交换列的顺序,这样不至于出错.
不知道怎么做了,希望能得到你们的帮助,谢谢了

解决方案 »

  1.   

    那用 DataGrid.DataKeyField    DataGrid.DataKeys[e.item.itemindex]
      

  2.   

    现在数据是从datagrid上获取的,已经没有数据源了,如果要保存原来的数据源,这样就牺牲了太多的性能,这样又不合适
    谢谢
      

  3.   

    用FindControl方法查找到你要用的控件,如用的控件为Label:Label lbl = (Label)DataGrid.FindControl("控件的ID"),然后对lbl进行操作即可。
      

  4.   

    DataGrid.DataKeys[e.item.itemindex]
    这个应该可以啊
      

  5.   

                Button lb = (Button)sender;
                DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent;
                GridViewRow gvr = (GridViewRow)dcf.Parent;
                //gvr.RowIndex,得到当前行索引
                string courseid2 = this.GridView1.Rows[gvr.RowIndex].Cells[0].Text;
      

  6.   

    我好象没说明白,大家很多都误会了
    其实目的是为了将e.item.cell[index]中的int型变量index换成datagrid数据源中的字段名,这样至少我没办法实现,所以想请教大家一个比较好的解决方法。也就是只要能通过字段名获取datagrid中的数据(当然牺牲太多性能的方法不行,已经被经理枪毙了),就成
      

  7.   

    用e.Item.FindControl(string id)来找吧
      

  8.   

    ((DataRowView)e.Item.DataItem).Row["column"]试试这个
      

  9.   

    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlterItem)
    {
    DataRowView drv=(DataRowView)e.Item.DataItem;
    string ss=drv["column"].ToString(); 
    }
    datagrid本身没有通过列名取值得功能,要用datatable或dataview来实现
      

  10.   

    datagrid本身没有通过列名取值得功能,要用datatable或dataview来实现--------------------------------------
    所以需要找一个合适的解决方法,唉,头大了,谢谢大家
      

  11.   

    找到方法了,唉
    谢谢大家的支持
    这里说下怎么做的:
    首先建立一个hashtable,用一个for(i=0到count-1)循环遍历所有的邦定字段,也就是datagrid数据字段(模版列应该跳过),hashtable (myHT = new Hashtable())的key值存字段名,value值存i的值
    这样,hashtable就会有一个对应关系,调用的时候
    e.item.cell[Convert.ToInt32(myHT[你的key值])]
    这里主要将index换成了Convert.ToInt32(myHT[你的key值]),所以,只要模版列在datagrid的最左边或者最右边,无论怎么调整绑定列的顺序,都可以通过字段名来获取数据,字段名也就是key值。
    有点麻烦,但是还能用,大家有什么更好的方法可以拿出来讨论,结贴,是因为已经能实现功能了