【发布时间】:2025-12-17 01:55:02
【问题描述】:
在我的 Web 应用程序中,我有一个网格视图,并且这个网格视图是数据绑定的。在这个网格视图上方,我有一个文本框,用户可以首先在其中输入员工 ID 并在网格视图中显示员工姓名。在网格视图中,它具有编辑图标。当用户点击该编辑图标时,网格视图中的一些文本框将出现,用户可以编辑文本框中的文本。我让它工作到目前为止。但是,我的问题是当我试图在网格视图中编辑空文本框时,它给了我这个错误:
对象未设置为对象的实例
我所做的只是检查文本框是否为空。这确实忽略了错误,但不是我真正想要的
protected void txtEditedEmployeeID_TextChanged(object sender, EventArgs e)
{
DatabaseManager dbManager = Common.GetDbManager();
foreach (GridViewRow row in gridViewAddEmployee.Rows)
{
TextBox txtEmployee= (TextBox)row.FindControl("txtEmployeeID");
if (txtEmployee!= null)
{
string personID = txtEmployee.Text;
DataSet dsRE = dbManager.GetEmployeeNameByID(personID);
for (int i = 0; i < dsRE.Tables[0].Rows.Count; i++)
{
string employeeFirstName = dsRE.Tables[0].Rows[i]["FIRST_NAME"].ToString();
string employeeLastName = dsRE.Tables[0].Rows[i]["LAST_NAME"].ToString();
((TextBox)row.FindControl("txtEmployeeName")).Text = staffLastName + " " + staffFirstName;
}
}
else
{
}
}
}
HTML ASP.NET 代码
<asp:TemplateField HeaderText="EmployeeID">
<EditItemTemplate>
<asp:TextBox ID="txtEmployeeID" runat="server" AutoPostBack="true" OnTextChanged= "txtEditedEmployeeID_TextChanged" Text='<%#Bind("Employee_ID") %>'Width="90px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblEmployeeID" runat="server" CssClass="GridInput" Text='<%#Bind("Employee_ID") %>'Width="90px"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Employee Name">
<EditItemTemplate>
<asp:TextBox ID="txtEmployee" runat="server" ReadOnly ="true" Text='<%#Bind("Full_Name") %>'Width="90px"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblEmployeeName" runat="server" CssClass="GridInput" Text='<%#Bind("Full_Name") %>'Width="90px"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
【问题讨论】:
-
哪一行导致错误?
-
@MatthewSpencer, 'string personID = txtEmployee.Text;'如果我没有将 if(txtEmployee != null) 放入我的代码中,则会导致问题
-
txtEditedEmployeeID触发事件是在 GridView 内部还是在 GridView 之上?如果你也发布 aspx 标记会更好。 -
因为 texbox 不在行中而在标题中?而是在网格上使用 FindControl?
-
@DragonBorn - 为什么当用户更改文本框中的某些文本时调用
txtEditedEmployeeID_TextChanged,会触发此事件。你到底想做什么?