как получить значение выбранной строки в aspxgridview devexpress

У меня есть devexpress aspxgridview, и мне нужно получить значение выбранной строки. Кто-нибудь знает, как получить значение первичного ключа выбранной строки без обратной передачи. Событие OnSelectionChanged не запускается. Как я могу запустить событие OnSelectionChanged без обратной передачи.

<dx:ASPxGridView ID="popupProductsGrid" runat="server" AutoGenerateColumns="False" Width="815px" KeyFieldName="LOGICALREF" ClientInstanceName="popupProductsGrid" 
OnSelectionChanged="popupProductsGrid_SelectionChanged" OnCustomCallback="popupProductsGrid_CustomCallback">
<Columns>
    <dx:GridViewDataTextColumn Caption="KOD" FieldName="URUNKOD" ShowInCustomizationForm="True" VisibleIndex="1" Width="100px">
    </dx:GridViewDataTextColumn>
    <dx:GridViewDataTextColumn Caption="AÇIKLAMA" FieldName="URUN" ShowInCustomizationForm="True" VisibleIndex="2" Width="250px">
    </dx:GridViewDataTextColumn>
    <dx:GridViewDataTextColumn Caption="STOK" FieldName="MIKTAR" ShowInCustomizationForm="True" VisibleIndex="3" Width="50px">
    </dx:GridViewDataTextColumn>
    <dx:GridViewDataTextColumn Caption="LOGICALREF" FieldName="LOGICALREF" ShowInCustomizationForm="True" VisibleIndex="0" Visible="False" Width="100px">
    </dx:GridViewDataTextColumn>
    <dx:GridViewDataTextColumn Caption="BİRİM" FieldName="ANABIRIM" ShowInCustomizationForm="True" VisibleIndex="4" Width="40px">
    </dx:GridViewDataTextColumn>

    </Columns>
    <SettingsBehavior AllowFocusedRow="True" AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" />
    <Settings ShowFilterRow="True" />
    <SettingsText EmptyDataRow="Listelenecek Kayıt Bulunamadı" />
    </dx:ASPxGridView>


protected void popupProductsGrid_SelectionChanged(object sender, EventArgs e)
    {
        DataRow dr = popupProductsGrid.GetDataRow(popupProductsGrid.FocusedRowIndex);
        Session["stok_kodu"] = dr[0].ToString();
    }

Еще одна вещь, я не хочу, чтобы это возвращалось. Поэтому я попробовал альтернативные способы, такие как HtmlRowPrepared и CustomCallback.

  protected void popupProductsGrid_HtmlRowPrepared(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
    {
        if (e.KeyValue != null)
        {
            string parameter = e.KeyValue.ToString();
            e.Row.Attributes.Add("onclick", "popupProductsGrid.PerformCallback('" + parameter + "')");
        }
    }

    protected void popupProductsGrid_CustomCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomCallbackEventArgs e)
    {
        if (e.Parameters != "")
        {
            Session["stok_kodu"] = e.Parameters;
        }
    }

person Arif YILMAZ    schedule 25.10.2014    source источник
comment
event doesnt get triggered. Установить AutoPostBack на true.. ?   -  person Shaharyar    schedule 25.10.2014
comment
но я не хочу, чтобы он выполнял обратную передачу.   -  person Arif YILMAZ    schedule 25.10.2014
comment
Без постбека не обновится. вы можете поместить его в AjaxUpdatePanel, он будет асинхронно обновлять gridview.   -  person Shaharyar    schedule 25.10.2014


Ответы (2)


DevExpress использует обратные вызовы почти во всех своих элементах управления, которые в основном похожи на обратные передачи. но без перезагрузки всей страницы только сам элемент управления (в вашем случае это будет ASPxGridView с идентификатором popupProductsGrid).

Итак, если вы хотите использовать только обратные вызовы, чтобы страница не обновлялась полностью для вашего ASPxGridView, вам понадобится

  1. Установите свойство ClientInstanceName сетки (например, popupProductsGrid).
  2. Обработка события CustomCallback (которое вы уже делаете)
  3. Используйте функцию PerformCallback на стороне клиента всякий раз, когда пользователь щелкает строку (чтобы вы могли отправить индекс текущей строки, а на стороне сервера вы могли бы получить первичный ключ и другие значения строки, которые вам нужны).

Самый простой способ добиться этого — использовать событие на стороне клиента FocusedRowChanged, чтобы инициировать требуемый "клик" и из этого вызова PerformCallback. отправка свойства исходного объекта GetFocusedRowIndex на сервер, чтобы вы могли использовать GetRowValues метод сетки в коде на стороне сервера (событие CustomCallback)

В конце документации есть хороший пример для ASPxGridView.CustomCallback Event, который делает именно то, что вы хотите.

Также помните, что для того, чтобы обратные вызовы работали так, как вы хотите, необходимо установить значение false для свойства AutoPostBack и установить значение true для EnableCallBacks. свойство сетки (поведение по умолчанию — использовать обратные вызовы вместо обратных передач, но убедитесь, что оба свойства установлены правильно).

person Jorge Iván Burgos Aguilar    schedule 26.10.2014