假设有一个datagrid
我现在想得到我当前所选的行的某一列的值,比如datagrid有3列,分别是id,name,number,然后再没一行前面有一个编辑按钮
我选中想得到我选中的其中一行的数据,以便进行更新操作,请问该如何写,上网查了下,有人这么写:
    int ID = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];
    string name = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
但我试了会出现System.InvalidCastException: 指定的转换无效
    如何换成string name = (e.Item.Cells[1].Controls[0]).ToString();
则name的值是System.Web.UI.DataBoundLiteralControl
    请问我该如何得到具体的正确值

解决方案 »

  1.   

    方法1:指定datakeyfield
    <asp:datagrid datakeyfield=id ...
    int id = Int32.Parse(datagrid.DataKeys[e.Item.ItemIndex].ToString());
    方法2:
    注意第一列是Cell[0];
    string name = ((TextBox)e.Item.Cells[0].Controls[0]).Text;
      

  2.   

    用了方法2,出现System.InvalidCastException: 指定的转换无效
      

  3.   

    方法2:
    注意第一列是Cell[0];
    string name =e.Item.Cells[0].Text;
      

  4.   

    如果是普通的BoundColumn就可以,但是如果用
    <edititemtemplate>
    <asp:TextBox Width="70" id="b" Text='<%#DataBinder.Eval(Container.DataItem,"fwcdate1")%>' runat="server"></asp:TextBox></edititemtemplate>
    这种去绑定数据的话,还是取不到数据,取到的数据都是''
      

  5.   

    如果不是绑定列,像上面的可以用
    string name = ((TextBox)e.Item.Cells[0].Controls[0]).Text;或
    string name = ((TextBox)e.Item.Cell[0].FindControl("b")).Text;
      

  6.   

    做一个3列的Table,分别是id,name,number,做为DataGrid的数据源
    添加、删除、修改都在Table上做保险些
      

  7.   

    string str_SoftwareName = ((TextBox)DataGrid1.Items[e.Item.ItemIndex].FindControl("ID_SoftwareName")).Text.ToString();