我遇到了一个试图在同一页面上找到文本框控件的问题。当我调试它时,它一直给我一个null。
这是我的代码:
public void UpdateTimeLog(string input)
{
string timeNumber = "txtTime" + input;
TextBox myTextbox = (TextBox)FindControl(timeNumber);
sqlConnection.Open();
using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "]=@Time" + input + " WHERE [JobShtId]=@JobShtId", sqlConnection))
{
command.Parameters.AddWithValue("@JobShtId", jobSheetId);
command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text);
command.ExecuteNonQuery();
}
sqlConnection.Close();
}
解决了问题:我没有指定文本框控件位于容器中(例如ContentPlaceHolder1)。
以下是更正后的代码:
public void UpdateTimeLog(string input)
{
var container = Master.FindControl("ContentPlaceHolder1");
string timeNumber = "txtTime" + input;
TextBox myTextbox = (TextBox)container.FindControl(timeNumber);
sqlConnection.Open();
using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "]=@Time" + input + " WHERE [JobShtId]=@JobShtId", sqlConnection))
{
command.Parameters.AddWithValue("@JobShtId", jobSheetId);
command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text);
command.ExecuteNonQuery();
}
sqlConnection.Close();
}
答案 0 :(得分:1)
您应该将文本框作为发件人对象发送,如下所示:
UpdateTimeLog("2",(TextBox)sender);
当然你也需要修改你的方法来接受TextBox对象。
这只有在为多个文本框使用相同的事件处理程序时才有意义。
答案 1 :(得分:1)
应该是工作试试,
TextBox myTextBox = (TextBox)(this.Controls[("txtTime" + input)]).Text);
答案 2 :(得分:1)
很难通过ID找到控制权。请尝试使用此代码
public static Control[] FlattenHierachy(Control root)
{
List<Control> list = new List<Control>();
list.Add(root);
if (root.HasControls())
{
foreach (Control control in root.Controls)
{
list.AddRange(FlattenHierachy(control));
}
}
return list.ToArray();
}
和
public void UpdateTimeLog(string input)
{
string timeNumber = "txtTime" + input;
// TextBox myTextbox = (TextBox)FindControl(timeNumber);
Control[] allControls = FlattenHierachy(Page);
foreach (Control control in allControls)
{
TextBox textBox = control as TextBox;
if (textBox != null && textBox.ID == timeNumber)
{
textBox.Text = "Hello";//Do your other stuff
}
}
//Rest is ommited
}