我正在尝试从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无法解析。经过对Internet的调查后,我找不到合适的解决方案,所以这就是为什么我在这里问。希望有人能帮忙

最佳答案

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

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

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

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

Java的:

<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事件,您可能需要根据需要对此进行修改。

关于c# - Javascript QueryString到C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11003652/

10-11 23:40