当readonly为true时,无法获取gridview文本框值



我有我的gridviews项目模板标签

 <asp:TemplateField HeaderText="TotalTime" SortExpression="TotalTime">
       <ItemTemplate>
           <asp:TextBox ID="TotalTime" readonly="true" runat="server" ></asp:TextBox>                                            
        </ItemTemplate>
  </asp:TemplateField>

在我的按钮点击事件中,我试图将文本框只读属性设置为false并获取值,但它不适用于TotalTime文本框

    protected void BtnSaveAttendence_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow Gr in GridView1.Rows)
        {
         TextBox txt = (TextBox)(Gr.FindControl("TotalTime"));
         txt.ReadOnly = false;
        }
        int Rest = new int();
        object[] objAttnd = new object[8];
        foreach (GridViewRow GR in GridView1.Rows)
        {
            objAttnd[0] = 0;
            objAttnd[1] = ((Label)GR.FindControl("LblEMPNAME")).Text;
            objAttnd[2] = UserInfo.Company.CompanyID;
            objAttnd[3] = Common.Convert_MM_DD_YYYY(txtDate1.Text);
            objAttnd[4] =((TextBox)GR.FindControl("InTime")).Text;
            objAttnd[5] =((TextBox)GR.FindControl("OutTime")).Text;
            objAttnd[6] = ((TextBox)GR.FindControl("TotalTime")).Text;                
            objAttnd[7] = Convert.ToDecimal(((Label)GR.FindControl("LblEmpCode")).Text);
            foreach (GridViewRow Gr in GridView1.Rows)
            {
                TextBox txt = (TextBox)(Gr.FindControl("TotalTime"));
                txt.ReadOnly = true;
            }
         Rest = objAttendance.InsertUpdateAttendenceDetailNew(objAttnd);
        }
        if (Rest == -1)
        {
            lblError.Text = "<div class='ErrorMsg'> Attendance details already added for Selected date !!</div>";
        }
    }

Plz告诉我如何获得值

就您的代码而言,当您使其成为Readonly false并在Foreach循环中读取值时,它将只读取Textbox的一个值,然后在Foreach循环中,您有另一个Foreach循环,它找到Textbox并生成Readonly true,因此取出ForEach循环并更改您的代码,如

protected void BtnSaveAttendence_Click(object sender, EventArgs e)
{
    foreach (GridViewRow Gr in GridView1.Rows)
    {
     TextBox txt = (TextBox)(Gr.FindControl("TotalTime"));
     txt.ReadOnly = false;
    }
    int Rest = new int();
    object[] objAttnd = new object[8];
    foreach (GridViewRow GR in GridView1.Rows)
    {
        objAttnd[0] = 0;
        objAttnd[1] = ((Label)GR.FindControl("LblEMPNAME")).Text;
        objAttnd[2] = UserInfo.Company.CompanyID;
        objAttnd[3] = Common.Convert_MM_DD_YYYY(txtDate1.Text);
        objAttnd[4] =((TextBox)GR.FindControl("InTime")).Text;
        objAttnd[5] =((TextBox)GR.FindControl("OutTime")).Text;
        objAttnd[6] = ((TextBox)GR.FindControl("TotalTime")).Text;                
        objAttnd[7] = Convert.ToDecimal(((Label)GR.FindControl("LblEmpCode")).Text);
      /*ForEach from Here to*/
     Rest = objAttendance.InsertUpdateAttendenceDetailNew(objAttnd);
    }
  /*===>here*/
    foreach (GridViewRow Gr in GridView1.Rows)
    {
        TextBox txt = (TextBox)(Gr.FindControl("TotalTime"));
        txt.ReadOnly = true;
    }
    if (Rest == -1)
    {
        lblError.Text = "<div class='ErrorMsg'> Attendance details already added for Selected date !!</div>";
    }
}

尝试从代码后面添加只读属性,如下所示:

TotalTime.Attributes.Add("readonly", "readonly");

在读取代码后面的值之前,无需将readonly设置为false。