我有一个带有几个文本框和网格视图的表单。有一个名为“Inward Number”的文本框,其文本更改事件始终触发。当我想触发另一个控件的事件时,它只是触发Inward Number文本框的文本更改事件。所有其他控件都会发生这种情况。有人可以帮忙吗?
protected void txtInward_No_TextChanged(object sender, EventArgs e)
{
a = 'A';
NewRow();
}
我使用了正确的名称,但仍然会发生此错误。
<asp:TextBox ID="txtInward_No" runat="server" Width="220px" CssClass="txtbox"
EnableViewState="False"
AutoPostBack="True" ontextchanged="txtInward_No_TextChanged">
</asp:TextBox>
新行只会在我的网格中创建一个新行。
private void NewRow() { int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtnew = new DataTable();
dtnew = (DataTable)ViewState["CurrentTable"];
DataRow drr = null;
if (dtnew.Rows.Count > 0)
{
for (int i = 1; i <= dtnew.Rows.Count; i++)
{
TextBox box1 = (TextBox)GridView1.Rows[rowIndex].Cells[2].FindControl("TextBox1");
TextBox box2 = (TextBox)GridView1.Rows[rowIndex].Cells[3].FindControl("TextBox2");
TextBox box3 = (TextBox)GridView1.Rows[rowIndex].Cells[4].FindControl("TextBox3");
TextBox box4 = (TextBox)GridView1.Rows[rowIndex].Cells[5].FindControl("TextBox4");
TextBox box5 = (TextBox)GridView1.Rows[rowIndex].Cells[6].FindControl("TextBox5");
drr = dtnew.NewRow();
if (txtInward_No.Text =="1")
{
drr["InwardNumber"] = txtInward_No.Text + b.ToString();
}
else
{
drr["InwardNumber"] = txtInward_No.Text + a.ToString();
}
drr["Bags"] = box1.Text;
drr["GrossWt"] = box2.Text;
drr["TareWt"] = box3.Text;
drr["NetWt"] = box4.Text;
drr["DCBillWt"] = box5.Text;
rowIndex++;
}
dtnew.Rows.Add(drr);
ViewState["CurrentTable"] = dtnew;
GridView1.DataSource = dtnew;
GridView1.DataBind();
}
}
PrevData();
b++;
a++;
}
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.ontextchanged.aspx
TextBox控件必须在发布到服务器的帖子之间保留一些值才能使此事件正常工作。确保为此控件启用了视图状态。
尝试为TextBox启用ViewState。
答案 1 :(得分:1)
我认为可能发生的事情是ASP.NET依赖ViewState来决定TextBox的值是否已经改变。但是你已经在这个控件上禁用了ViewState。我不确定它为什么不能使用ControlState,但你可以尝试为这个TextBox启用ViewState,看看它是否有效。