C# 仅获取值已更改的文本框
我有用户信息,当我从gridview中单击名称时,它会将SQL中的数据填充到文本框中。诸如名字、姓氏、地址、电子邮件等数据。我有大约30个文本框和下拉列表 我只想从文本框中获取值,该值已更改,并在sql查询中更新它们。例如:只有中间名和地址已更改,因此查询将只更新此字段,而不是所有30个左右的字段 我尝试这个只是为了测试,但它不起作用。有什么想法吗C# 仅获取值已更改的文本框,c#,asp.net,C#,Asp.net,我有用户信息,当我从gridview中单击名称时,它会将SQL中的数据填充到文本框中。诸如名字、姓氏、地址、电子邮件等数据。我有大约30个文本框和下拉列表 我只想从文本框中获取值,该值已更改,并在sql查询中更新它们。例如:只有中间名和地址已更改,因此查询将只更新此字段,而不是所有30个左右的字段 我尝试这个只是为了测试,但它不起作用。有什么想法吗 protected void btnUpdateChanges_Click(object sender, EventArgs e) { tb
protected void btnUpdateChanges_Click(object sender, EventArgs e)
{
tbFirstName.TextChanged += new EventHandler(txt_TextChanged);
tbLastName.TextChanged += new EventHandler(txt_TextChanged);
tbMiddleName.TextChanged += new EventHandler(txt_TextChanged);
}
void txt_TextChanged(object sender, EventArgs e)
{
TextBox txt = sender as TextBox;
switch (txt.ID)
{
case "tbFirstName":
lblMessage.Text = "First Name changed";
break;
case "tbLastName":
break;
case "tbMiddleName":
break;
}
}
将初始值存储在会话变量中,然后更新它,然后在单击或其他操作时使用存储的会话更新数据库。为什么不对文本框进行子类化,并让它告诉是否已修改 而不是textbox.Text=“some Text”用户myTextBox.SetText(“some Text”) 然后只需检查TextModified属性,查看当前文本是否与原始文本不同
public class MyTextBox : TextBox {
private string originalText = null;
public MyTextBox()
: base() {
}
public bool TextModified {
get {
if (this.OriginalText != this.Text) return true;
return false;
}
}
public string OriginalText {
get { return this.originalText; }
internal set { this.originalText = value; }
}
public void SetText(string text) {
this.Text = text;
this.OriginalText = text;
}
}
您必须将初始值存储在某个位置,并对其进行查找,最后更新表“它不起作用”不是一个好的解释。旁注:根据您的数据库结构,更新一个字段和所有字段可能不会显示任何性能差异。@Rex-虽然这是一个好建议,但如果您决定将注释转换为答案(存储在会话状态),请确保避免在每次请求时先从数据库读取值@AlexeiLevenkov ok:)@Rex我知道你可以在变量中存储值。但是如果我有100个文本框,我必须将它们全部存储在一个单独的变量中。我只是想问是否有一种方法可以让改变了的那一个。