GridView Обновление из кода, вызвавшего исключение - PullRequest
2 голосов
/ 29 августа 2011

У меня есть GridView со списком клиентов и их данными, привязанными к Sq1DataSource.Я хочу обновить его из кода, лежащего в основе события RowUpdating, путем доступа к ячейке данных по ячейке и отправки ее в функцию обновления в моем клиентском BLL.Это код:

   protected void gvClients_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        GridViewRow row = gvClients.Rows[e.RowIndex];
        //accesses Client Id
        cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text;
        int cliId = int.Parse(cliIdStr);
        cliBll = new ClientBLL(conStrName);
        //Accesses client object from DB according to Client Id accessed from gridView
        client = cliBll.GetClient(cliId);
        if (client != null)
        {
            client.ClientName = ((TextBox)(row.Cells[2].Controls[0])).Text;
            client.Phone = ((TextBox)(row.Cells[3].Controls[0])).Text;
            client.EMail = ((TextBox)(row.Cells[4].Controls[0])).Text;
            client.Fax = ((TextBox)(row.Cells[5].Controls[0])).Text;
            client.Address = ((TextBox)(row.Cells[6].Controls[0])).Text;
            client.City = ((DropDownList)(row.Cells[7].Controls[0])).SelectedValue;
            client.ZipCode = ((TextBox)(row.Cells[8].Controls[0])).Text;
            client.IdNum = ((TextBox)(row.Cells[9].Controls[0])).Text;
            client.BusField = ((TextBox)(row.Cells[10].Controls[0])).Text;
            cliBll = new ClientBLL(conStrName);
            cliBll.UpdateClient(cliDtlShrt);
        }
    }

Когда я запускаю программу и нажимаю кнопку редактирования GridView, все в порядке, но когда я нажимаю кнопку Uodate, выдается следующее исключение:

[ArgumentOutOfRangeException: указанный аргумент находится вне диапазона допустимых значений.Имя параметра: индекс]
System.Web.UI.ControlCollection.get_Item (Int32 index) + 8673806

, указывающий на эту строку в коде:

cliIdStr = ((TextBox)(row.Cells[1].Controls[0])).Text;

ЕслиЯ правильно понимаю сообщение, проблема в элементах управления [0], но почему?Как получить доступ к данным из ячеек gridView для отправки в Updating?

1 Ответ

1 голос
/ 29 августа 2011

Ваш код завершается ошибкой, потому что когда происходит обновление, строка, предлагающая пользовательский интерфейс редактирования, больше недоступна - строка в e.RowIndex - это обычная строка в виде таблицы, чьи ячейки будут иметь контроль в соответствии с типом столбца. Таким образом, большинство ячеек (например, ячейки для столбца BoundField) не будут иметь никакого контроля внутри него, так как ячейка напрямую содержит значение - отсюда ошибка в Controls[0].

Вам необходимо использовать свойство GridViewUpdateEventArgs.NewValues ​​, чтобы получить новые значения для строки (неключевые столбцы). Аналогично значения для ключевых столбцов будут присутствовать в e.Keys .

РЕДАКТИРОВАТЬ: Я также предлагаю вам рассмотреть возможность использования ObjectDataSource вместо SqlDataSource, чтобы сделать вашу жизнь проще - см. эту статью , чтобы начать.

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