[英]How to assign value to text box control inside the table column in C# coding file?
我正在創建asp.net Web表單。 因為我正在創建動態表,其中特定列是數字文本框控件。 我不知道如何從文本框控件中分配和獲取值..我的編碼如下..
for (int i = 0; i < my_DataTable.Rows.Count; i++)
{
HtmlTableRow _Row = new HtmlTableRow();
HtmlTableCell Col = new HtmlTableCell();
Col.InnerText = my_DataTable.Rows[i]["itmCode"].ToString();
_Row.Controls.Add(Col);
Col = new HtmlTableCell();
_Row.Controls.Add(Col);
Col.InnerHtml = "<input type='number' value='0'>";
_Row.Controls.Add(Col);
my_Table.Rows.Add(_Row);
}
在一個特定的方法中,我需要將值賦給文本框控件還需要獲取值現有值..所以我嘗試按照下面的方法
var no_1 = my_Table.Rows[0].Cells[1].InnerText;
如果我檢查no_1,它有文本框,但我不知道如何訪問當前值並分配新值..任何人都可以幫助我如何實現這一點..
使用Dynamic Controls時必須記住的一件事是,每當發生postback
發時,您將丟失動態創建的控件( 因為回發調用Page_load()
事件,因此如果您在load事件中沒有它們,則將不會生成,因此不會顯示。 ) 因此,最好在load事件中重新呈現控件。
因此,為了獲得動態分配的控件( HTML
或Asp.net
)的價值,我將如何做到這一點。
首先,創建一個持有者,用於在runat="server"
存儲頁面中的控件( 因此,您可以在后端訪問該控件 )。 在您的情況下,該控件是my_Table
。 然后使用Session/ViewState
跟蹤所有創建的動態控件,可以使用它們的值重新呈現控件:
要在頁面中添加新控件,它將如下所示:
var cnt = _findRelated("txtDynamic") + 1; //for all the dynamic text boxes i am using the prefix of txtDynamic just to keep SOC.
var nId = $"txtDynamic-{cnt}";
var _ctrl = new HtmlInputText("Integer")
{
Name = nId,
ID = nId,
//Value="Default Value" //uncomment to assign a default value
};
_ctrl.Attributes.Add("runat", "server");
var row = new System.Web.UI.HtmlControls.HtmlTableRow();
var newCell = new HtmlTableCell();
newCell.Controls.Add(_ctrl);
row.Cells.Add(newCell);
my_Table.Rows.Add(row);
Session.Add(cnt.ToString(), _ctrl); //here i am using session to manage the controls but you can also use the ViewState
在上面的代碼中,我使用HtmlInputText
來生成<input type="number"></input>
使用它的構造函數獲取更多類型字符串可以在: HtmlInputText中讀取。
_findRelated()
方法用於獲取附加到Form
的動態文本控件的數量。 它被定義為:
private int _findRelated(string prefix)
{
string reqstr = Request.Form.ToString();
return ((reqstr.Length - reqstr.Replace(prefix, "").Length) / prefix.Length);
}
要設置動態添加控件的值,我們可以執行以下操作( 如果未在創建時分配 ):
var cell = my_Table.Rows[_myTable.Rows.Count-1].cells[0]; //here i have assumed it is in the last row and in the first cell you can change the index to be anything.
var txtDynamic = cell.Controls.OfType<HtmlInputText>().FirstOrDefault();//getting the control
txtDynamic.Value = "<Some thing new>"; //setting the value
現在,要獲得分配的值:
var cell = my_Table.Rows[_myTable.Rows.Count-1].cells[0]; //here i have assumed it is in the last row and in the first cell you can change the index to be anything.
var txtDynamic = cell.Controls.OfType<HtmlInputText>().FirstOrDefault();//getting the control
//now use the .Value property of the control to get the value as:
var nValue = txtDynamic.Value;
而且我們知道動態添加的控件將在postback
事件中丟失,然后我們可以創建一個方法,該方法將使用存儲在Session
的controls
並使用它們的值重新呈現它們:
private void _renderControls()
{
try
{
if (Session.Count > 0)
{
for (int k = 0; k < Session.Count; k++)
{
if (Session[k] != null)
{
var _ctrl = new HtmlInputText("Integer") //you can make it dynamic to add different types of input control
{
Name = ((HtmlInputText)Session[k]).ID,
ID = ((HtmlInputText)Session[k]).ID,
Value = ((HtmlInputText)Session[k]).Value
};
if (_ctrl != null)
{
_ctrl.Attributes.Add("runat", "server");
var row = new System.Web.UI.HtmlControls.HtmlTableRow();
var newCell = new HtmlTableCell();
newCell.Controls.Add(_ctrl);
row.Cells.Add(newCell);
my_Table.Rows.Add(row);
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
現在,讓我們修改Page_load()
事件,在每次postback
調用此方法:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
_renderDynamic(); // this method will be called if there is an postback event to re-render the dynamic controls
}
}
注意:
HtmlInputText
作為Integer
屬性來創建input[type="number"]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.