Ну, не будет.
Вы перебираете элементы управления foreach (Control c in phdTrix.Controls)
и каждый раз, когда вы находите текстовое поле, в котором вы делаете следующее:
TrixName = (c as TextBox).Text;
Hardness = (c as TextBox).Text;
Webpage = (c as TextBox).Text;
Это назначит одно и то же текстовое поле каждой переменной.
Самое простое решение - назначить уникальный идентификатор каждому текстовому полю при его создании, а затем использовать его, чтобы определить, какой из них вы хотите. Вы можете использовать свойство ID
. Тогда вы можете получить что-то вроде этого:
string TrixName = null;
string Hardness = null;
string Webpage = null;
foreach (Control c in phdTrix.Controls)
{
if (c.GetType() == typeof(TextBox))
{
switch (c.ID)
{
case "TrixName":
TrixName = (c as TextBox).Text;
break;
case "Hardness":
Hardness = (c as TextBox).Text;
break;
case "Webpage":
Webpage = (c as TextBox).Text;
break;
}
UpdateTrix(TrixID, TrixName, Hardness, Webpage);
}
}
Ваш код создания должен быть:
TextBox textbox = new TextBox();
textbox.ID = "TrixName";
textbox.Text = table.Rows[i]["TrixName"].ToString();
TextBox textbox2 = new TextBox();
textbox2.ID = "Hardness";
textbox2.Text = table.Rows[i]["Hardness"].ToString();
TextBox textbox3 = new TextBox();
textbox3.ID = "Webpage";
textbox3.Text = table.Rows[i]["Webpage"].ToString();
Вам понадобится другой способ хранения TrixID
, так как вы должны иметь детерминистический способ идентификации элементов управления, когда вы приходите, чтобы прочитать данные.
Однако, если у вас есть несколько групп этих элементов управления на странице, это не сработает, поскольку каждый идентификатор должен быть уникальным. В этом случае вам нужно добавить уникальный идентификатор (GUID) к элементам управления при их создании:
textbox.ID = "TrixName_" + Guid.NewGuid().ToString();
затем, когда вы хотите найти элемент управления, используйте string.Split()
для удаления GUID:
string[] nameParts = c.ID.Split('_');
switch (nameParts[0])
{
.... as before.
}