1

我正在尝试从 devexpress aspxGridview 中的 FocusedRow 获取 KeyField 值。

以下代码我到目前为止

  • 网格视图

           <dx:ASPxGridView ID="ClientenSummary" runat="server" Width="700px" 
            OnSelectionChanged="ClientenSummary_SelectionChanged" EnableCallBacks="False">
    
            <ClientSideEvents FocusedRowChanged="function(s, e) 
    

    { OnGridFocusedRowChanged(); }" />

            <SettingsBehavior AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" ProcessSelectionChangedOnServer="True" />
            <SettingsPager PageSize="50">
            </SettingsPager>
            <Settings ShowFilterRow="True" ShowFilterRowMenu="True" />
        </dx:ASPxGridView>
    
  • asp页面标记中的JavaScript函数

     <script language="javascript" type="text/javascript">
     function OnGridFocusedRowChanged() {
         ClientenSummary.GetRowValues(ClientenSummary.GetFocusedRowIndex(), 'ClassNR', OnGetRowValues);
     }
    
     function OnGetRowValues(values) {
         window.location = "../main.aspx?FocusedRowKeyField=" + values[0];
     }
    </script>
    
  • 用于解析查询字符串的后端 C# 代码

       protected void Page_Load(object sender, EventArgs e)
       {
        if (!string.IsNullOrEmpty(Request.Params["FocusedRowKeyField"]))
        {
            GetClientDetails(Request.Params["FocusedRowKeyField"]);
        }
    

我想不通的是,为什么 QueryString 没有解决。在对互联网进行一些调查之后,我找不到一个像样的解决方案,所以这就是我在这里问的原因。希望有人可以帮助

4

1 回答 1

2

好的,首先您的网格中没有AllowFocusedRow="true"SettingsBehavior。这将导致它忽略 FocusRowChanged 的​​任何客户端事件。

其次,您需要告诉控件您是要在服务器还是客户端上处理焦点行更改事件。我会推荐客户,并将在下面发布一些代码。(DevExpress 文档:http ://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_FocusedRowChangedtopic )

第三,您ProcessSelectionChangedOnServer="True"将触发您的 ClientenSummary_SelectionChanged 事件的代码。但是您没有发布此代码,老实说,除非这提供了您没有发布的某些特定功能,否则您不需要它来满足您的要求。

最后,我建议设置网格的客户端实例名称和 Key Fieldname。在我的 java 代码示例中,我使用“grid”和“ClassNR”。

爪哇:

<script type="text/javascript">
function OnGridFocusedRowChanged() {
    grid.GetRowValues(grid.GetFocusedRowIndex(), 'ClassNR', OnGetRowValues);
}

function OnGetRowValues(ClassNR) {
    window.location.href = "../main.aspx?FocusedRowKeyField=" + ClassNR;
} 

网格:

<dx:ASPxGridView ID="grid" ClientInstanceName="grid" runat="server" EnableCallBacks="false" KeyFieldName="ClassNR">

设置:

<SettingsBehavior AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" ProcessFocusedRowChangedOnServer="false" AllowFocusedRow="true"  />

客户端事件:

<ClientSideEvents FocusedRowChanged="function(s,e) { OnGridFocusedRowChanged(); }" /> 

下一位只是为了测试该值,随意更改它。C#:

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script language=JavaScript>alert(" + Request.Params["FocusedRowKeyField"] + ");</script>");  
    }

这是来自我为您的问题设置的测试应用程序。当焦点行更改时,它将使用 FocusedRowKeyField 更新浏览器地址窗口(仅在 IE9 中测试)。它还将调用后面的代码中的脚本,该脚本也会弹出带有该值的警报。Page_Load 事件将在每次焦点行更改时触发,您可能希望根据需要进行修改。

于 2012-06-14T20:17:23.287 回答