Mohamed Ilyas Ответов: 1

C# - не удается прочитать динамически созданное текстовое поле в gridview


Привет Я программно создаю текстовые поля в gridview. Но я не могу получить значение из текстового поля.

У меня есть текстовое поле, в котором я получаю количество создаваемых строк, и при нажатии кнопки "Go" оно заполняет gridview динамически создаваемыми текстовыми полями.

Мне нужно прочитать значения из текстовых полей gridview, и вот здесь я застрял.

Мой Gridview:
<asp:GridView ID="gvPlan" runat="server" ShowFooter="True" AutoGenerateColumns="true">
<Columns>
</Columns>
</asp:GridView>


кодовая страница:
protected void btnGo_Click(object sender, EventArgs e)
{
   Insert_Grid();
}

private void Insert_Grid()
{
   CreateGridView();
   int numbers = int.Parse(txtRows.Text.Trim());
   int cellCount = gvPlan.Rows[0].Cells.Count;
   int rowsCount = gvPlan.Rows.Count;
   foreach (GridViewRow row in gvPlan.Rows)
   {
      // text box - ID
    TextBox txtID = new TextBox();
    txtID.ID = "tID" + (Convert.ToInt32(row.RowIndex + 1)).ToString();
    txtID.Attributes.Add("runat", "server");
    row.Cells[1].Controls.Add(txtID);

      // text box - NAME
    TextBox txtName = new TextBox();
    txtName.ID = "tName" + (Convert.ToInt32(row.RowIndex + 1)).ToString();
    txtName.Attributes.Add("runat", "server");
    txtName.Attributes.Add("ReadOnly", "true");
    row.Cells[2].Controls.Add(txtName);
   }
}

private void CreateGridView()
{
   int numbers = int.Parse(this.txtRows.Text.Trim());
   DataTable dt = new DataTable();
   dt.Columns.Add("ID", typeof(string));
   dt.Columns.Add("Name", typeof(string));
   
   for (int i = 0; i < numbers; i++)
   {
      dt.Rows.Add("", "");
   }
   ViewState["CurrentTable"] = dt;
   gvPlan.DataSource = dt;
   gvPlan.DataBind();
}

protected void btnSave_Click(object sender, EventArgs e)
{
   int rowIndex = 0;
   if (ViewState["CurrentTable"] != null)
   {
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
      if (dtCurrentTable.Rows.Count > 0)
      {
        for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
        {
          //extract the TextBox values
          TextBox gtxtID = (TextBox)gvPlan.Rows[rowIndex].Cells[1].FindControl("tID" + (rowIndex+1));
          TextBox gtxtName = (TextBox)gvPlan.Rows[rowIndex].Cells[2].FindControl("tName" + (rowIndex + 1));
           gtxtName.Text = gtxtID.Text;
          rowIndex++;
        }
    }
}


Проблема заключается в процедуре "btnSave_Click", где я, кажется, не получаю значение из gtxtID. Он не может найти элемент управления текстовым полем и объект имеет значение null

Мы очень ценим вашу помощь.

С уважением
Ильяс

Что я уже пробовал:

Пробовал отлаживать код за кодом но тщетно

1 Ответов

Рейтинг:
2

RickZeeland

Может быть, ответы здесь будут полезны: Как я могу прочитать динамически созданное текстовое поле в gridview[^]