#c# #asp.net #.net #gridview
#c# #asp.net #.net #gridview
Вопрос:
У меня возникла проблема. У меня есть страница, на которой есть Gridview
редактирование / обновление / отмена редактирования.
Страница работает / отображается до тех пор, пока я не добавлю OnRowUpdating=»updateRow» в Gridview
. Тогда страница вообще не отображается.
При отладке он даже не попадает на события загрузки страницы. Когда я извлекаю это свойство из Gridview (не касаясь какого-либо кода за кодом), страница отображается. Я искал в Google и не могу найти ничего подобного. Я могу найти, не запускается ли он / не работает, но ничего о том, что страница не отображается.
Мой код приведен ниже:
<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"
AutoGenerateColumns="false"
Width="100%"
OnRowEditing="EditRow"
OnRowUpdating="UpdateRow"
OnRowCancelingEdit="CancelEditRow"
DataKeyNames="OnCallID"
AllowPaging="true"
PageSize="50"
OnPageIndexChanging="ChangePage"
OnRowDataBound="gvVehicle_OnRowDataBound"
>
<Columns>
<asp:TemplateField HeaderText="Edit" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="25px">
<ItemTemplate>
<asp:LinkButton ID="lnkEdit" runat="server" Text="Edit" CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lnkUpdate" runat="server" Text="Update" CommandName="Update" />
<asp:LinkButton ID="lnkCancel" runat="server" Text="Cancel" CommandName="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="OnCallID" DataField="OnCallID" ReadOnly="true" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="25px" Visible="false" />
<asp:TemplateField HeaderText="OnCallID" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" Visible="false" >
<ItemTemplate><%# Eval("OnCallID")%></ItemTemplate>
<EditItemTemplate>
<asp:Label ID="HDNOnCallID" runat="server" Visible="true" Text='<%# Eval("OnCallID")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Team Member Name" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" >
<ItemTemplate><%# Eval("TeamMemberName")%></ItemTemplate>
<EditItemTemplate>
<asp:Label ID="LBLUserIDLST" runat="server" Visible="true" Text='<%# Eval("TeamMemberName")%>' />
<!--<asp:ListBox ID="UserIDLST" runat="server" SelectionMode="Single" Visible="true" Width="100" Rows="1"></asp:ListBox> -->
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="On Call Start Date" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" >
<ItemTemplate><%# Eval("OnCallStartDate")%></ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="StartDateEditUpdate" runat="server" MaxLength="10" name="StartDateEditUpdate" Width="70" Text='<%# Eval("OnCallStartDate")%>'></asp:TextBox>
<asp:Image id="StartDateEditUpdateCalImg" runat="server" ImageUrl="../Images/CalendarImg.png" ImageAlign="Bottom" />
<ajaxToolkit:CalendarExtender ID="extendStartDateEditUpdate" runat="server" CssClass="datePicker" PopupPosition="TopLeft"
TargetControlID="StartDateEditUpdate" Format="MM/dd/yyyy" PopupButtonID="StartDateEditUpdateCalImg">
</ajaxToolkit:CalendarExtender>
<asp:RequiredFieldValidator ID="validateStartDateEditUpdate"
ControlToValidate="StartDateEditUpdate"
Text="You must Type Something in for Start Date!"
runat="server"
Enabled="true"
CssClass="validatorErrorDisplay"
/>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="On Call Start Time" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" >
<ItemTemplate><%# Eval("OnCallStartTime")%></ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="StartTimeEditUpdate" runat="server" MaxLength="10" Width="100" Text='<%# Eval("OnCallStartTime")%>'></asp:TextBox>
<ajaxToolkit:MaskedEditExtender ID="MaskedEditorStartTimeEditUpdate" runat="server"
TargetControlID="StartTimeEditUpdate"
Mask="99:99"
MessageValidatorTip="true"
OnFocusCssClass="MaskedEditFocus"
OnInvalidCssClass="MaskedEditError"
MaskType="Time"
InputDirection="LeftToRight"
ErrorTooltipEnabled="True"
AcceptAMPM="true"
AutoComplete="true"
/>
<ajaxToolkit:MaskedEditValidator ID="MaskedEditorValidatorStartTimeEditUpdate" runat="server"
ControlExtender="MaskedEditorStartTimeEditUpdate"
ControlToValidate="StartTimeEditUpdate"
IsValidEmpty="true"
AcceptAMPM = "true"
InvalidValueMessage="This is not a valid time2"
InvalidValueBlurredMessage="This is not a valid time"
Enabled="true"
TooltipMessage="Must be in Time format HH:MM AM/PM"
ValidationExpression="(0[1-9]|1[0-2]):([0-5][0-9]) (AM|PM|am|pm)"
/>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="On Call End Date" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" >
<ItemTemplate><%# Eval("OnCallEndDate")%></ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="EndDateEditUpdate" runat="server" MaxLength="10" name="EndDateEditUpdate" Width="70" Text='<%# Eval("OnCallEndDate")%>'></asp:TextBox>
<asp:Image id="EndDateEditUpdateCalImg" runat="server" ImageUrl="../Images/CalendarImg.png" ImageAlign="Bottom" />
<ajaxToolkit:CalendarExtender ID="extendEditUpdate" runat="server" CssClass="datePicker" PopupPosition="TopLeft"
TargetControlID="EndDateEditUpdate" Format="MM/dd/yyyy" PopupButtonID="EndDateEditUpdateCalImg">
</ajaxToolkit:CalendarExtender>
<asp:RequiredFieldValidator ID="validateEndDateEditUpdate"
ControlToValidate="EndDateEditUpdate"
Text="You must Type Something in for End Date!"
runat="server"
Enabled="true"
CssClass="validatorErrorDisplay"
/>
<asp:CompareValidator ID="CompareStartDateEndDateEditUpdateValidator" Operator="GreaterThanEqual" Type="Date"
ControlToValidate="EndDateEditUpdate" ControlToCompare="StartDateEditUpdate"
ErrorMessage="End Date must be greater then Start Date!" runat="server" BackColor="Red" ForeColor="White" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="On Call End Time" HeaderStyle-HorizontalAlign="Left" HeaderStyle-Width="600px" >
<ItemTemplate><%# Eval("OnCallEndTime")%></ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="EndTimeEditUpdate" runat="server" MaxLength="10" Width="100" Text='<%# Eval("OnCallEndTime")%>'></asp:TextBox>
<ajaxToolkit:MaskedEditExtender ID="MaskedEditorEndTimeEditUpdate" runat="server"
TargetControlID="EndTimeEditUpdate"
Mask="99:99"
MessageValidatorTip="true"
OnFocusCssClass="MaskedEditFocus"
OnInvalidCssClass="MaskedEditError"
MaskType="Time"
InputDirection="LeftToRight"
ErrorTooltipEnabled="True"
AcceptAMPM="true"
AutoComplete="true"
/>
<ajaxToolkit:MaskedEditValidator ID="MaskedEditorValidatorEndTimeEditUpdate" runat="server"
ControlExtender="MaskedEditorEndTimeEditUpdate"
ControlToValidate="EndTimeEditUpdate"
IsValidEmpty="true"
AcceptAMPM = "true"
InvalidValueMessage="This is not a valid time2"
InvalidValueBlurredMessage="This is not a valid time"
Enabled="true"
TooltipMessage="Must be in Time format HH:MM AM/PM"
ValidationExpression="(0[1-9]|1[0-2]):([0-5][0-9]) (AM|PM|am|pm)"
/>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="White" />
<EditRowStyle BackColor="#efefef" />
<FooterStyle BackColor="#F37721" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#F37721" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
protected void EditRow(object sender, GridViewEditEventArgs e)
{
// this enables/disables the add new row validation
EnableDisableValidationsAndButtons(false);
GridView1.EditIndex = e.NewEditIndex;
this.PopulateData();
}
protected void CancelEditRow(object sender, GridViewCancelEditEventArgs e)
{
// this enables/disables the add new row validation
EnableDisableValidationsAndButtons(true);
GridView1.EditIndex = -1;
this.PopulateData();
}
protected void UpdateRow(object sender, GridViewUpdatedEventArgs e)
{
//GridViewRow row = (GridViewRow)GridView1.Rows[e.NewEditIndex];
GridViewRow row = (GridViewRow)GridView1.Rows[GridView1.EditIndex];
Label txtOnCallID = (Label)row.FindControl("HDNOnCallID");
String OnCallID = txtOnCallID.Text.ToString();
TextBox txtBoxStartDate = (TextBox)row.FindControl("StartDate");
String StartDate = txtBoxStartDate.Text.ToString();
TextBox txtBoxStartTime = (TextBox)row.FindControl("StartTime");
String StartTime = txtBoxStartTime.Text.ToString();
TextBox txtBoxEndDate = (TextBox)row.FindControl("EndDate");
String EndDate = txtBoxStartDate.Text.ToString();
TextBox txtBoxEndTime = (TextBox)row.FindControl("EndTime");
String EndTime = txtBoxEndTime.Text.ToString();
// do update stuff here
SQL CODE HERE
// run update
//new DatabaseConnection().RSExecute(sCommand);
lblMessage.Text = "Record successfully Updated!";
GridView1.EditIndex = -1;
//this.PopulateData();
// doing a redirect here for the full URL because if you refresh page it adds the record duplicate times
// also some of the form fields are still filled out, this removes them as well
Response.Redirect(Request.Url.AbsoluteUri);
}
Ответ №1:
Измените подпись функции, как показано ниже, и проверьте. Вы привязываете функцию к GridViewUpdatedEventArgs вместо GridViewUpdateEventArgs
protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
}
Комментарии:
1. Похоже, это сработало. Глупая ошибка с моей стороны. Не уверен, почему это приводит к тому, что страница вообще не отображается (она даже не загружается при загрузке страницы при отладке)?? Все еще тестируется, но, по крайней мере, страница сейчас отображается, и я перехожу к функции, когда нажимаю «обновить». Спасибо