如何在aspxgridview devexpress中获取所选行的值

时间:2014-10-25 10:34:53

标签: c# asp.net gridview aspxgridview

我有一个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;
        }
    }

2 个答案:

答案 0 :(得分:2)

DevExpress几乎在他的所有控件中都使用Callbacks,基本上有点像回发但没有重新加载整个页面只是控件本身(在你的情况下它将是 ASPxGridView ,ID为popupProductsGrid)。

因此,假设您只想使用回调,因此您的 ASPxGridView 页面未完全刷新,您需要

  1. 设置网格的 ClientInstanceName 属性(如popupProductsGrid)
  2. 处理 CustomCallback 事件(您已经在做)
  3. 每当用户点击一行时,在客户端使用 PerformCallback 功能(这样您就可以发送当前行索引,并从服务器端发送当前行索引)获取所需的主键和其他行值。
  4. 实现此目标的最简单方法是使用 FocusedRowChanged 客户端事件来触发您想要的“点击”以及来自该呼叫 < em> PerformCallback 将源对象属性 GetFocusedRowIndex 发送到服务器端,以便您可以使用 GetRowValues 服务器端代码网格的方法( CustomCallback 事件)

    ASPxGridView.CustomCallback Event的文档末尾有一个很好的例子,它完全符合您的要求。

    另请注意,要使回调按您的方式工作,您需要将 AutoPostBack 属性设置为false,并将 EnableCallBacks <设置为true / em> 网格的属性(默认行为是使用回调而不是回发,但检查两个属性是否都已正确设置)。

答案 1 :(得分:0)