Возникают проблемы с получением Grid View для выбора строки в C # - PullRequest
0 голосов
/ 16 мая 2011

Я работаю над этой проблемой уже несколько дней.

Справочная информация. У меня настроена корзина покупок, и она сохраняется в сеансе. Я вытаскиваю его из сеанса и привязываю к сетке. Я хочу, чтобы пользователи могли изменять количество товара. Я сталкиваюсь с несколькими проблемами, и эта просто не улаживается.

У меня есть кнопка в каждом ряду с названием команды «Выбрать». При нажатии этой кнопки открывается модальное всплывающее окно с текстовым полем.

Однако, когда я нажимаю кнопку, SelectedValue равен -1, и он вызывает исключение Out of Range.

Это должен быть ProductId предмета. DataKey Name - это ID продукта, и когда я показываю ID продукта в виде сетки, он отображается как правильный не -1 ID.

 protected void btnChange_Click(object sender, EventArgs e)
{
    Dictionary<int, ShoppingCartItem> cart = (Dictionary<int, ShoppingCartItem>)Session["Cart"];


    cart[(int)gvCart0.SelectedValue].Quantity = int.Parse(tbQuantity.Text);
    gvCart0.DataBind();
}

Ответы [ 3 ]

0 голосов
/ 16 мая 2011

Сначала в ItemCommand получите ProductId и сохраните его в View-State, а затем в событии ButtonClick сделайте то, что вы хотите сделать, получив ProductId из View-State, и не забудьте установитьИсточник данных в Grid-View при изменении коллекции.

0 голосов
/ 16 мая 2011

Примечание :: измените CommandName вашей кнопки на "selectCart"

Установите свойство аргумента команды для вашей кнопки:

.aspx

CommandArgument='<%#((GridViewRow)Container).RowIndex%>'

.cs

 protected void gvCart0_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        try
        {
            int index = Convert.ToInt32(e.CommandArgument);
            if (e.CommandName == "selectCart")
            {

                Dictionary<int, ShoppingCartItem> cart = (Dictionary<int, ShoppingCartItem>)Session["Cart"];
                cart[index].Quantity = int.Parse(tbQuantity.Text);

            }

            gvCart0.DataBind();

        }

        catch (Exception ee)
        {
            string message = ee.Message;
        }
    }
0 голосов
/ 16 мая 2011

Для RowEditing вы должны сделать что-то подобное в событии RowEditing, чтобы установить EditIndex,

protected void grid_RowEditing(object sender, GridViewEditEventArgs e)
{
    grid.EditIndex = e.NewEditIndex;
}

Возможно, вам придется сделать то же самое с событием OnSelectedIndexChanging.

...