Динамично създавам таблица, която съдържа текстово поле. Правим го със следния код:
foreach (DataRow row in Score_Sheet.Rows) // Loop over the rows.
{
int rowIndex = Score_Sheet.Rows.IndexOf(row); // Not sure if i need this yet
Label label = new Label();
TextBox txt = new TextBox();
txt.Text = row["Value"].ToString();
txt.ID = row["Risk"].ToString();
label.Text = row["Risk"].ToString() + " = ";
rows = new TableRow();
cell = new TableCell();
cell.Controls.Add(label);
cell2 = new TableCell();
cell2.Controls.Add(txt);
rows.Controls.Add(cell);
rows.Controls.Add(cell2);
SSGrid.Controls.Add(rows);
}
това е добавяне на таблица към моята уеб страница чрез този код:
<asp:Table ID="SSGrid" runat="server"></asp:Table>
таблицата се попълва правилно, но когато се опитам да осъществите достъп до актуализираната стойност от текстовото поле в таблицата, получавам нулево референтно изключение.
Моят код за контрол е:
TextBox txt_any = (TextBox)SSGrid.FindControl("ANY");
string anyany = txt_any.Text;
row1["Value"] = any;
как мога да получа достъп до стойностите, които се актуализират в този текстов кутий?
Благодаря!
Отговори:
0 за отговор № 1Тъй като използвате динамично генерираниконтролират тук, за да имате достъп до тях или техните ценности, ще трябва да ги пресъздадете, когато страницата е отложена. Това е така, защото динамичните контроли губят състоянието си, след като са били изобразени на изгледа и единственият начин да се играе с тях отново след повторното отстъпление е да ги създадете отново в кода-зад.
Така че, тук трябва просто да пресъздадете таблицата, като използвате кода, който използвате, за да я създадете за първи път.
Можете да поставите този код извън if(!IsPostBack)
блок код във вашия Page_Load
и това ще ви накара да вървите с това.
Надявам се това да помогне.