访问 Gridview EditItemTemplate 时出错
Error on Accessing Gridview EditItemTemplate
下面是我的错误信息:
System.NullReferenceException: 'Object reference not set to an
instance of an object.'
DueDateTB was null.
当我开始更新 Gridview 中的日期列时,会在执行期间发生这种情况。以下是我的前端和后端代码。
背面:
protected void PaymentsDueGV_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox DueDateTB = (TextBox)((GridView)sender).FindControl("DueDateTB");
string DueDate = DueDateTB.Text;
DueDateTB.Text= (Convert.ToDateTime(DueDateTB.Text)).ToString("dddd, MMMM dd, yyyy h:mm tt");
PaymentsDueDS.UpdateParameters["DueDate"].DefaultValue = DueDateTB.Text;
}
正面:
<asp:TemplateField HeaderText="Due Date" SortExpression="CreatedDate" ItemStyle-HorizontalAlign="Center">
<EditItemTemplate>
<asp:TextBox runat="server" Text='<%# Convert.ToDateTime(Eval("DueDate")).ToLocalTime().ToString("d") %>' ID="DueDateTB" CausesValidation="True" Columns="5" MaxLength="10"></asp:TextBox>
<asp:RequiredFieldValidator ID="DueDateTBRValidator" runat="server" ErrorMessage="*"
ForeColor="Black" ControlToValidate="DueDateTB">
</asp:RequiredFieldValidator>
<asp:CalendarExtender ID="DueDateCE" runat="server" Enabled="True" TargetControlID="DueDateTB" Format="MM/dd/yyyy"></asp:CalendarExtender>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLocalTime" runat="server" Text='<%# Convert.ToDateTime(Eval("DueDate")).ToLocalTime().ToString("d") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="GridCells"></HeaderStyle>
<ItemStyle CssClass="GridCells"></ItemStyle>
<FooterStyle CssClass="GridCells"></FooterStyle>
</asp:TemplateField>
您必须将 sender
对象转换为 GridViewRow
,而不是转换为 GridView
,因为:
TextBox DueDateTB = (TextBox)((GridViewRow)sender).FindControl("DueDateTB");
下面是我的错误信息:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
DueDateTB was null.
当我开始更新 Gridview 中的日期列时,会在执行期间发生这种情况。以下是我的前端和后端代码。
背面:
protected void PaymentsDueGV_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox DueDateTB = (TextBox)((GridView)sender).FindControl("DueDateTB");
string DueDate = DueDateTB.Text;
DueDateTB.Text= (Convert.ToDateTime(DueDateTB.Text)).ToString("dddd, MMMM dd, yyyy h:mm tt");
PaymentsDueDS.UpdateParameters["DueDate"].DefaultValue = DueDateTB.Text;
}
正面:
<asp:TemplateField HeaderText="Due Date" SortExpression="CreatedDate" ItemStyle-HorizontalAlign="Center">
<EditItemTemplate>
<asp:TextBox runat="server" Text='<%# Convert.ToDateTime(Eval("DueDate")).ToLocalTime().ToString("d") %>' ID="DueDateTB" CausesValidation="True" Columns="5" MaxLength="10"></asp:TextBox>
<asp:RequiredFieldValidator ID="DueDateTBRValidator" runat="server" ErrorMessage="*"
ForeColor="Black" ControlToValidate="DueDateTB">
</asp:RequiredFieldValidator>
<asp:CalendarExtender ID="DueDateCE" runat="server" Enabled="True" TargetControlID="DueDateTB" Format="MM/dd/yyyy"></asp:CalendarExtender>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLocalTime" runat="server" Text='<%# Convert.ToDateTime(Eval("DueDate")).ToLocalTime().ToString("d") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle CssClass="GridCells"></HeaderStyle>
<ItemStyle CssClass="GridCells"></ItemStyle>
<FooterStyle CssClass="GridCells"></FooterStyle>
</asp:TemplateField>
您必须将 sender
对象转换为 GridViewRow
,而不是转换为 GridView
,因为:
TextBox DueDateTB = (TextBox)((GridViewRow)sender).FindControl("DueDateTB");