前台代码:
<asp:TemplateField HeaderText="检查日期">  
<ItemTemplate>  
    <input  id="time" type="text" runat="server"  name="time"  onfocus="WdatePicker()" style="width: 80px; text-align:center;"  />
</ItemTemplate>
</asp:TemplateField>
我想在后台读到模板列html控件的值,用findcontrol(ID)没用!
急,谢谢各位大侠!

解决方案 »

  1.   

    参考下面的例子:System.Web.UI.WebControls.ImageButton cbox = (System.Web.UI.WebControls.ImageButton)GridView1.Rows[i].FindControl("btnUpload");
      

  2.   

    <input id="time" type="text" runat="server" name="time_<%# Container.DataItemIndex %>" onfocus="WdatePicker()" style="width: 80px; text-align:center;" />Request.Form["time_"+ xxx];
      

  3.   

        protected void gv_checkinfor_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "btn_save_Click")
            {
                int i = Convert.ToInt32(e.CommandArgument.ToString());//gv行号
                 string dev_num = gv_checkinfor.Rows[i].Cells[1].Text;
               string t = Request.Form["time_" + i.ToString()];
                       }
        }
    t是空值
      

  4.   

      protected void gv_checkinfor_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "btn_save_Click")
            {
                int i = Convert.ToInt32(e.CommandArgument.ToString());//gv行号
                string dev_num = gv_checkinfor.Rows[i].Cells[1].Text;
                System.Web.UI.HtmlControls.HtmlInputText txt = (System.Web.UI.HtmlControls.HtmlInputText)gv_checkinfor.Rows[i].FindControl("time");
                Response.Write(txt.Value);
            }
        }txt也是null
      

  5.   

    把这个控件换成<asp textbox>吧
      

  6.   

    绑定到text 有值吗,你精确到那一行,试试,
     System.Web.UI.HtmlControls.HtmlInputText txt = (System.Web.UI.HtmlControls.HtmlInputText)GridView1.Rows[0].FindControl("name");            Response.Write(txt.Value.ToString());
      

  7.   

    btn_save_Click是什么啊?为什么它触发的时候你在后台就去读ItemTemplate而不是edittemplate之类的模板呢?
      

  8.   

    完全是你的使用方法有问题。你可以把下面的代码拷贝粘贴为xx.aspx进行直接测试。
    下面提供了3种获取的方法
    <%@ Page Language="C#" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          System.Data.DataTable dt = new System.Data.DataTable();
          System.Data.DataRow dr;
          dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.String)));
          dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));      for (int i = 0; i < 8; i++)
          {
            System.Random rd = new System.Random(Environment.TickCount * i); ;
            dr = dt.NewRow();
            dr[0] = i;
            dr[1] = "xxx" + i.ToString();
            dt.Rows.Add(dr);
          }      GridView1.DataSource = dt;
          GridView1.DataBind();
        }
      }  protected void Button1_Click(object sender, EventArgs e)
      {
        foreach (GridViewRow v in GridView1.Rows)
        {
          HtmlInputText t = v.FindControl("time") as HtmlInputText;
          Response.Write("<li>" + t.Value);
        }
      }  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
      {
        if (e.CommandName == "GetDate")
        {      GridViewRow row = GridView1.Rows[Convert.ToInt32(e.CommandArgument)];
          HtmlInputText t = row.FindControl("time") as HtmlInputText;
          Response.Write("<li>" + t.Value);
        }
      }  protected void Button3_Click(object sender, EventArgs e)
      {
        GridViewRow row = (sender as Button).Parent.Parent as GridViewRow;
        HtmlInputText t = row.FindControl("time") as HtmlInputText;
        Response.Write("<li>" + t.Value);
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCommand="GridView1_RowCommand">
        <Columns>
          <asp:TemplateField HeaderText="检查日期">
            <ItemTemplate>
              <input id="time" type="text" runat="server" name="time" style="width: 80px; text-align: center;" />
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="检查日期">
            <ItemTemplate>
              <asp:Button ID="Button2" runat="server" Text="得到方法2" CommandName="GetDate" CommandArgument='<%#Container.DataItemIndex %>' />
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="检查日期">
            <ItemTemplate>
              <asp:Button ID="Button3" runat="server" Text="得到方法3" Height="21px" OnClick="Button3_Click"
                Width="89px" />
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>
      <asp:Button ID="Button1" runat="server" Text="得到方法1" OnClick="Button1_Click" />
      </form>
    </body>
    </html>
      

  9.   

    我用的跟第二种方法是一样的啊
    而且我用模板列试了,结果还是空值,没有读出input里的日期
        protected void gv_checkinfor_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "btn_save_Click")
            {
               int i = Convert.ToInt32(e.CommandArgument.ToString());//gv行号
                GridViewRow row = gv_checkinfor.Rows[Convert.ToInt32(e.CommandArgument)];
               HtmlInputText t = row.FindControl("time"+i.ToString()) as HtmlInputText;
               Response.Write(t.Value.ToString());
            }
        }