Обновление Gridview Возвращает ноль - PullRequest
2 голосов
/ 22 августа 2011

Я пытаюсь использовать метод обновления для вида сетки и просто возвращаю null

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        TextBox Currency = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("Currency"));
        GridView1.EditIndex = -1;

        if (!Page.IsPostBack)
        {
            FillTravelers();
        }
    }

Есть идеи? когда я нажимаю update, он просто возвращает поле к его предыдущему значению, но ничего не возвращает.

Спасибо

Ответы [ 3 ]

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

Поскольку ваше Gridview находится в своей простейшей форме без элементов управления, определенных в gridView (и, следовательно, в GridView не определено текстовое поле Валюта), пожалуйста, проверьте источник данных GridView1, который, как я предполагаю, будет Datatable. Затем вам нужно определить, какой столбец таблицы данных является столбцом Валюта.

Например, для приведенной ниже таблицы данных это будет столбец 2.

  DataTable taskTable = new DataTable("AmountList");
  taskTable.Columns.Add("Id", typeof(int));
  taskTable.Columns.Add("Currency", typeof(string));
  taskTable.Columns.Add("Amount", typeof(decimal)); 

Исходя из этого, вы можете получить обновленную стоимость валюты, используя следующий код ниже.

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = TaskGridView.Rows[e.RowIndex];
        GridView1.EditIndex = -1;
        TextBox txtCurrency = (TextBox)(row.Cells[2].Controls[0]);
        if (!Page.IsPostBack)
        {
            FillTravelers();
        }
        //... Rest of the code
    }

Обратите внимание, что если столбец Валюта отличается от приведенного выше, вам необходимо изменить индекс rows.Cells [index] .Controls [0]. Например, если Валюта находится в столбце 5, то определение txtCurrency становится следующим:

 TextBox txtCurrency = (TextBox)(row.Cells[5].Controls[0]);

Если вы не можете легко определить индекс столбца таблицы данных (или если вы используете более сложный источник данных), то, предполагая, что GridView1 не имеет слишком много столбцов, я бы порекомендовал попытаться увеличить ячейки индексируйте шаг за шагом, пока вы не увидите обновленное значение в Watch for row.Cells [index] .Controls [0] во время отладки.

Редактировать: (Добавление кода для получения индекса столбца столбца Валюта) Вы можете передать «Currency» в виде строки и экземпляра OracleDataReader в метод ниже, и это должно дать вам индекс столбца (или это даст вам -1, если в OracleDataReader нет столбца Currency).

private int GetColumnIndexIfExists(OracleDataReader dr, string columnName)
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        if (dr.GetName(i).Equals(columnName))
        {
            return i;
        }
    }
    return -1;
}

Затем в реальном коде вы можете изменить add 1 к индексу ячейки, как показано ниже, потому что индекс ячейки не равен нулю, как индекс столбца.

TextBox txtCurrency = (TextBox)(row.Cells[i+1].Controls[0]);
1 голос
/ 22 августа 2011

Я не уверен, что вы поделились достаточно подробностями, но моя первоначальная мысль состояла в том, что если ваше «обновление» включает в себя нажатие кнопки (и, следовательно, обратной передачи) - ваши заполнители не будут стрелять, потому что! Page .IsPostback будет ложным.

Я предполагаю, что ваш метод "FillTravelers" имеет возможность работать с фильтрацией при нажатии кнопки "Обновить".

0 голосов
/ 22 августа 2011

В результате использования метода FindControl() вы получаете значение NULL, поскольку Currency элемент управления с именем *1003* отсутствует. Попробуйте,

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   // Here you get the row that you want to edit.
   GridViewRow row = GridView1.Rows[e.RowIndex];
   // This one returns you the cell inside the row that is being edited.
   // Replace 1 with the column no you want.
   TableCell tableCell = row .Controls[1] as TableCell;
   // And finally you have your textbox.
   TextBox textBox = tableCell.Controls[0] as TextBox;        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...