Переопределение editindex после обновления GridView - PullRequest
3 голосов
/ 13 февраля 2010

У меня есть элемент управления GridView, подключенный к источнику данных, на котором я разрешаю редактирование строк. Я использую стандартные кнопки редактирования / сохранения / удаления, которые указывают на команды Обновить, Отмена и редактировать GridView.

Я хотел бы добавить дополнительную кнопку «Далее», встроенную в кнопку сохранения / отмены. Это будет работать так же, как кнопка сохранения, но также добавит дополнительную строку в сетку и переведет эту строку в режим редактирования. Для этого я добавил код в событие Updated GridView, которое добавляет новую запись в базу данных, связывает сетку и устанавливает индекс редактирования. Кажется, это работает, но на самом деле сетка не возвращается в режиме редактирования. Я удалил новый код записи и просто оставил оператор для установки индекса редактирования, но сетка все равно не останется в режиме редактирования.

Можно ли заставить сетку оставаться в режиме редактирования в этом сценарии? Похоже, что если вы не установите свойство cancel GridViewUpdatedEventArgs, Сетка перейдет в режим просмотра. Я не хочу устанавливать свойство cancel в этом случае, потому что я хочу, чтобы GridView вызывал мой объект источника данных для сохранения записи. * +1007 *

Если это не сработает, похоже, мне потребуется разрешить обновление, чтобы оно происходило нормально, вернуться к клиенту и затем отправить другой запрос на сервер, чтобы добавить запись. Я предпочел бы не делать это таким образом, я хотел бы выполнить необходимые операции в контексте одного туда и обратно.

Вот как выглядит код (упрощенно):

protected void Button1_Click(object sender, EventArgs e)
    {
        // Works Fine
        this.sampleDataSource.Insert();
        this.sampleGridView.DataBind();
        this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
    }

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        // Grid will display new row, but will not be in edit mode
        this.sampleDataSource.Insert();
        this.sampleGridView.DataBind();
        this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
    }

Ответы [ 3 ]

1 голос
/ 28 февраля 2010

Я нашел решение, которое, кажется, делает то, что я хочу. По сути, мне нужно позволить GridView пройти обычную последовательность событий, а затем установить индекс редактирования. Вот код, опять же, упрощенный:

protected void sampleGridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        this.insertNewRow = true;
    }

protected void Page_LoadComplete(object sender, EventArgs e)
    {
        if (this.insertNewRow)
        {
            this.sampleDataSource.Insert();
            this.sampleGridView.DataBind();
            this.sampleGridView.EditIndex = this.sampleGridView.Rows.Count - 1;
        }     
    }
0 голосов
/ 15 июня 2010

У меня была похожая проблема с настройкой необходимого индекса. Это решение сработало для меня: grdProjectsForSubmiting - GridView для отображения данных

grdProjectsForSubmiting.EditIndex = requiredIndex; // не забывайте, что строки перечисляются от 0, а не от 1 !!
grdProjectsForSubmiting.DataSource = ProjectsController.SessionTodayEntries;
grdProjectsForSubmiting.DataBind ();

0 голосов
/ 13 февраля 2010

Возможно, нам понадобится какой-то код ... Но я могу догадаться, в чем проблема из вашего описания. Возможно, вам нужно установить EditIndex prior для повторного связывания. Если это не сработает (вне диапазона исключений?), Вам придется вызвать DataBind (), чтобы получить новую строку, установить EditIndex, снова вызвать DataBind ().

К сожалению, просто установка EditIndex на самом деле не делает работу. Вы должны установить индекс И вызвать DataBind ().

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