VS2008中。。
GridView代码如下
         <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <div class="spe_location">
                            管理员<input type="text" id="txtAdminName" runat="server" value='<%#Eval("AdminName") %>' />
                            密&nbsp;码 <input type="text" id="txtAdminPwd" runat="server" />&nbsp;权限:
                             <input id="rtnUpdate" type="radio" runat="server" title="AdminRole" checked='<%#Checked(Eval("AdminKind")) %>' />管理&nbsp;
                             <input id="rtnSelect" type="radio" runat="server" title="AdminRole" onclick="chkClick()" checked='<%#!Checked(Eval("AdminKind")) %>' />查看&nbsp;
                             <asp:ImageButton ID="imgEdit" runat="server" 
                                ImageUrl="~/images/admin/edit_btn.gif" onclick="imgEdit_Click" CommandArgument='<%#Eval("AdminID") %>' />
                             &nbsp;<asp:LinkButton ID="ltnDelete" runat="server" ForeColor="#CC0000" 
                                onclick="ltnDelete_Click" CommandArgument='<%#Eval("AdminID") %>'>删除</asp:LinkButton><br />
                        </div>
                        <div class="hos_map">
                            <input id="chkUser" runat="server" type="checkbox" checked='<%#Eval("Admin_as_User") %>' />用户管理
                            <input id="chkOrder" runat="server" type="checkbox" checked='<%#Eval("Admin_as_Order") %>' />订单管理
                            <input id="chkGoods" runat="server" type="checkbox" checked='<%#Eval("Admin_as_Goods") %>' />商品管理
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            </asp:GridView>
怎么在后台cs文件中获取ItemTemplate里textbox,radio,checkbox的值??
后台我是这样写的    protected void imgEdit_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton imgbtn = sender as ImageButton;        string sql = "update Admin set AdminName=@AdminName,AdminPwd=@AdminPwd,AdminKind=@AdminKind,Admin_as_User=@Admin_as_User,Admin_as_Order=@Admin_as_Order,Admin_as_Goods=@Admin_as_Goods where AdminID=@AdminID ";        SqlConnection con = new SqlConnection(str);        SqlCommand cmd = new SqlCommand(sql, con);        cmd.Parameters.Add("@AdminID", SqlDbType.Int).Value = imgbtn;
        cmd.Parameters.Add("@AdminName", SqlDbType.VarChar).Value = ?????????????????????;
        cmd.Parameters.Add("@AdminPwd",SqlDbType.VarChar).Value=????????;
        cmd.Parameters.Add("@AdminKind",SqlDbType.Char).Value=?????????;
        cmd.Parameters.Add("@Admin_as_User",SqlDbType.Bit).Value=???????????;
        cmd.Parameters.Add("@Admin_as_Order",SqlDbType.Bit).Value=???????????;
        cmd.Parameters.Add("@Admin_as_Goods",SqlDbType.Bit).Value=???????????;
    
    }
数据库是sql server 2005 
create table Admin
(
 AdminID int primary key identity(1,1)  
,AdminName varchar(20) not null
,AdminPwd varchar(20) not null
,AdminKind char(1) default 0
,Admin_as_User bit default 0
,Admin_as_Order bit default 0
,Admin_as_Goods bit default 0
)
请大师们指点迷津拜谢

解决方案 »

  1.   

    HtmlInputRadioButton radio = e.Row.FindControl("rtnSelect") as HtmlInputRadioButton;
      

  2.   


      e是点不出row这个属性的都在ItemTemplate里
      

  3.   


    GridViewRow gvr = (sender as LinkButton).NamingContainer as GridViewRow;   
    TextBox txt=gvr.FindControl("txt") as TextBox; 
      

  4.   

    GridView1.Rows[i].FindControl("") as HtmlGenericControl
    不要告诉我没 i 
      

  5.   

    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
    CheckBox CheckBox1 = GridView1.Rows[i].FindControl("CheckBox1") as CheckBox;
    Textbox Textbox1 = (textbox)GridView1.Rows[i].FindControl("Textbox1");
    }
      

  6.   

           txt为什么是null?        
      

  7.   

    一般都用findControl方法吧
    或者使用行列单元格方法去定位吧
      

  8.   

    FindControl(ID)是找不到我要的ID的  
      

  9.   

    foreach(GridViewRow row in GridView1.Rows){
    linkButton lb=row.findControl() as LinkButton;
    }
      

  10.   

    findcontrols(id)应该可以找到你要的id吧
      

  11.   

    http://lq470627063.blog.163.com/blog/static/7940533820102295447393/
      

  12.   

     GridViewRow row = ((LinkButton)(e.CommandSource)).NamingContainer as GridViewRow;
            LinkButton lb = row.FindControl("LinkButton") as LinkButton;
      

  13.   

    TextBox text = g.Rows[i].FindControl("text1") as TextBox; //text1是模版内控件的id
    if(text!=null) //为空说明没找到  检查你前台GridView的代码
    {
       // 。
    }
      

  14.   

    前台GridView里应该怎么改才能在后台获取到值啊??以下是我的写法。。<asp:TemplateField>
                        <ItemTemplate>
                            <div class="spe_location">
                                管理员<input type="text" id="txtAdminName" runat="server" value='<%#Eval("AdminName") %>' />
                                密&nbsp;码 <input type="text" id="txtAdminPwd" runat="server" />&nbsp;权限:
                                 <input id="rtnUpdate" type="radio" runat="server" title="AdminRole" checked='<%#Checked(Eval("AdminKind")) %>' />管理&nbsp;
                                 <input id="rtnSelect" type="radio" runat="server" title="AdminRole" onclick="chkClick()" checked='<%#!Checked(Eval("AdminKind")) %>' />查看&nbsp;
                                 <asp:ImageButton ID="imgEdit" runat="server" 
                                    ImageUrl="~/images/admin/edit_btn.gif" onclick="imgEdit_Click" CommandArgument='<%#Eval("AdminID") %>' />
                                 &nbsp;<asp:LinkButton ID="ltnDelete" runat="server" ForeColor="#CC0000" 
                                    onclick="ltnDelete_Click" CommandArgument='<%#Eval("AdminID") %>'>删除</asp:LinkButton><br />
                            </div>
                            <div class="hos_map">
                                <input id="chkUser" runat="server" type="checkbox" checked='<%#Eval("Admin_as_User") %>' />用户管理
                                <input id="chkOrder" runat="server" type="checkbox" checked='<%#Eval("Admin_as_Order") %>' />订单管理
                                <input id="chkGoods" runat="server" type="checkbox" checked='<%#Eval("Admin_as_Goods") %>' />商品管理
                            </div>
                        </ItemTemplate>
                    </asp:TemplateField>
      

  15.   

    GridView绑定方法如下:    private void GridViewBind()
        {        string sql = "select AdminID,AdminName,AdminPwd,AdminKind,Admin_as_User,Admin_as_Order,Admin_as_Goods from Admin";        SqlConnection con = new SqlConnection(str);        SqlCommand cmd = new SqlCommand(sql, con);        DataSet ds = new DataSet();        SqlDataAdapter da = new SqlDataAdapter(cmd);        con.Open();        da.Fill(ds);        this.GridView1.DataSource = ds.Tables[0];
            this.GridView1.DataBind();    }
      

  16.   


    你使用的是客户端控件,获取值则需要通过js脚本来获取,会比较麻烦
    可以参照:http://zhidao.baidu.com/question/99872428建议你使用服务器端控件,获取extbox,radio,checkbox的值就比较简单了。
      

  17.   


    你的是ImageButton所以要写作 
    GridViewRow gvr = (sender as ImageButton).NamingContainer as GridViewRow;
    TextBox txt=gvr.FindControl("txt") as TextBox;
      

  18.   

    其实最简单的办法就是调试下,看看上面的gvr是否为null,如果不为null再取里面的值
      

  19.   

    这个改了
    可能是我gridview里的是客户端控件。。
    生成页面之后控件的ID全变了。。
    我不想换成服务器控件能找到ID么?
      

  20.   

    这样应该是没有问题的,你的控件都是 runat="server" 在服务器端是完全可以获取的!!如果你不想用服务器端控件,仅是想得到值而已,有个办法:
    绑定数据时按照行号或者每一行的主键值,给该行的每个控件都绑定一个唯一的name即可。
    比如:<input type="text" id="txtAdminName" name='<%# "txtAdminName" + Eval("AdminID") %>'
    然后在代码页里用
    string index = e.CommandArgument.ToString();  //唯一标识值
    string AdminName = Request.Form["txtAdminName" + index ]  //获取单个控件的值大致思路是这样吧,楼主不妨一试..
      

  21.   

    FindControl(ID)是找不到我要的ID的 你的gridview是不是没有id(索引)这一列,但是你却想取到索引,然后根据你取到的值 去作为参数去调用方法,那你可以在<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None">
    这里面加一项DataKeyNames="id" 然后通过DataKey[e.RowIndex].value 来取。
      

  22.   

    GridView1_RowDataBind()写了才可以用e参数的吧,
    该e参数才是绑定的事件的参数