我正在尝试从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/