簡體   English   中英

如何在C#編碼文件的表列內為文本框控件賦值?

[英]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事件中重新呈現控件。

因此,為了獲得動態分配的控件( HTMLAsp.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事件中丟失,然后我們可以創建一個方法,該方法將使用存儲在Sessioncontrols並使用它們的值重新呈現它們:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM