C#基于文本框ID

时间:2017-03-24 11:15:43

标签: c# html sql

我正在创建一个Web表单,我有5个文本框。将放在此处的数据来自Stored Proc,它返回一个包含3列的表格,如下所示:

---------------------
|Group| ID  | Amount |
|-----+-----+--------|
|A    |1    | 5      |
|B    |2    | 9      |
|B    |1    | 2      |
|A    |2    | 1      |
|A    |3    | 57     |
----------------------

现在,我如何以有效的方式将特定的Amount值分配给相应的文本框,该文本框取决于列Group和ID,如下所示:

txt_A1.Value=5;
txt_A2.Value=1;
txt_A3.Value=5;
txt_B1.Value=2;
txt_B2.Value=9;

我目前正在使用此代码,但它不起作用。

string CatID = String.Concat(dr["Group"], dr["ID"]);
var control = Controls.Cast<Control>().FirstOrDefault(x => x.ID == string.Format("txt_{0}", CatID)) as TextBox;
if (control != null)
control.Text = dr["Amount"].ToString();

请注意,文本框是一个HTML对象,如<input type="Text" id="txt_A1" runat="server">

1 个答案:

答案 0 :(得分:0)

为了完成您的任务,所有这些<input type="text" id="txt_A1">控件都应该有runat="server",以便服务器或代码隐藏可以访问它们。

接下来,我建议使用asp.net控件TextBox而不是<input>控件。与他们合作更容易。

你的想法不错,但它只通过第一级控件,这意味着如果你的输入在div(它属于那个div的控件集合),你的代码就赢了找不到它。你必须做出递归函数,在页面和所有具有子控件的控件上找到输入控件,并且所有控件的子控件都可以有子控件......

所以,这是这样的功能。我已将其键入,因此您可以传递您正在搜索的控件类型。在您的情况下,该值应为HtmlInputText,因为input是通用的html文本控件。如果您使用的是asp.net TextBox控件,则应将TextBox作为控件类型传递。

public IEnumerable<Control> GetControlsOfType<T>(Control parent)
{
    if (parent.HasControls())
    {
        foreach (Control childControl in parent.Controls)
        {
            if (childControl is T)
                yield return childControl;

            foreach (var nextLevel in GetControlsOfType<T>(childControl))
            {
                yield return nextLevel;
            }
        }
    }
}

现在,像这样使用它:

//find all textControls
var textControls = GetControlsOfType<HtmlInputText>(this);
//find specific control from the list
var control = textControls.FirstOrDefault(t => t.ID == string.Format("txt_{0}", CatID));
//set value
(control as HtmlInputText).Value = "some value";