Я пытаюсь отобразить довольно простое еженедельное расписание на веб-сайте ASP.NET, который связан с таблицей SQL. Проблема, с которой я сталкиваюсь, заключается в том, что значения дня недели хранятся в таблице SQL как целые числа (от 1 до 7). Я хотел, чтобы целые числа отображались пользователю в виде фактических названий дней недели, что работает только при использовании события OnRowDataBound. Но когда я изменяю дни недели обратно на целые числа для редактирования, я получаю сообщение об ошибке JScript, что «Входная строка была не в правильном формате».
Сначала я подумал, что это может быть проблема с одной из ячеек, а не с двумя, с которыми я связывался, но, насколько я могу судить, это не так. К сожалению, ошибка JScript не дает мне достаточно информации, чтобы действительно отладить эту проблему, и я знаю, что событие OnEditing успешно изменяет текст двух связанных полей обратно на число
Итак, мой вопрос: как лучше всего это исправить? Есть ли лучший способ для отображения имен дней недели для пользователя, а затем изменить эти имена на целые числа, когда они хотят редактировать строку? Есть ли способ, которым я могу изменить шаблон редактирования, чтобы использовать что-то вроде выпадающего списка или что-то подобное?
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="false"
AutoGenerateDeleteButton="true"
AutoGenerateEditButton="true"
CssClass="view"
DataKeyNames="TimeID"
DataSourceID="SqlDataSource1"
OnRowDataBound="GridView1_RowDataBound"
OnRowEditing="GridView1_RowEditing"
Width="100%">
<Columns>
<asp:BoundField DataField="TimeID" HeaderText="TimeID" ReadOnly="true" Visible="false" />
<asp:BoundField DataField="WeekDayStart" HeaderText="Week Day Start" />
<asp:BoundField DataField="WeekDayEnd" HeaderText="Week Day End" />
<asp:BoundField DataField="StartTime" HeaderText="Start Time" />
<asp:BoundField DataField="EndTime" HeaderText="End Time" />
</Columns>
</asp:GridView>
// OnRowDataBound
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// Converts the text of WeekDayStart and WeekDayEnd to be actual week days
if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Footer)
{
e.Row.Cells[2].Text = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[Convert.ToInt32(e.Row.Cells[2].Text) - 1];
e.Row.Cells[3].Text = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[Convert.ToInt32(e.Row.Cells[3].Text) - 1];
}
}
// OnRowEditing
// CURRENTLY THROWING ERROR WHEN EDIT BUTTON IS CLICKED (JScript runtime error)
// "Sys.WebForms.PageRequestManagerServerErrorException: Input string was not in a correct format."
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.Rows[e.NewEditIndex].Cells[2].Text = (Array.IndexOf(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames,
GridView1.Rows[e.NewEditIndex].Cells[2].Text) + 1).ToString();
GridView1.Rows[e.NewEditIndex].Cells[3].Text = (Array.IndexOf(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames,
GridView1.Rows[e.NewEditIndex].Cells[3].Text) + 1).ToString();
}