Изменение текста ячейки GridView при редактировании «Входная строка была в неправильном формате.» C # ASP.NET - PullRequest
1 голос
/ 15 ноября 2011

Я пытаюсь отобразить довольно простое еженедельное расписание на веб-сайте 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();
}

1 Ответ

0 голосов
/ 15 ноября 2011

Ошибка происходит на стороне сервера, вы получаете ошибку javascript, потому что вы используете asp.net ajax (возможно, панель обновления). Отладка на сервере, и она поймает вашу ошибку. Предполагается, что вы пытаетесь проанализировать пустую строку или другое недопустимое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...