2012-06-12 69 views
1

我試圖從devexpress aspxGridview中的FocusedRow獲取KeyField值。javascript查詢字符串到c#

以下代碼我迄今爲止

  • 的GridView

     <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> 
    
  • JavaScript函數在asp網頁標記

    <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沒有解決。經過對inte的一些調查rwebs我無法找到一個體面的解決方案,所以這就是爲什麼我在這裏問。希望有人可以幫助

+0

你在哪裏無法解析查詢字符串?頁面上發生故障嗎?你沒有看到你的'Page_Load'代碼隱藏的價值嗎? – 48klocs

+0

@ 48klocs好吧,我解決了數據綁定不良的問題,但查詢字符串仍然顯示爲空 –

+1

使用fiddler或firebug來驗證通過線路發送的內容。此外,基於這個問題(http://stackoverflow.com/questions/3643041/setting-javascript-window-location)它似乎應該使用window.location.href屬性。 –

回答

2

好的,首先你沒有AllowFocusedRow="true"在你的網格的SettingsBehavior。這將導致它忽略FocusRowChanged的任何客戶端事件。

其次,您需要告訴控件是否要在服務器或客戶端上處理焦點行更改事件。我會推薦客戶,並會在下面發佈一些代碼。 (DevExpress文檔:http://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_FocusedRowChangedtopic

第三你有ProcessSelectionChangedOnServer="True"這將觸發您的ClientenSummary_SelectionChanged事件的代碼。但是你沒有發佈這個代碼,說實話,除非這是提供一些你沒有發佈的特定功能,你不需要它來滿足你的要求。

最後,我會建議設置網格的客戶端實例名稱和密鑰字段名稱。在我的Java代碼示例中,我使用「網格」和「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事件將在每次焦點行更改時觸發,您可能需要根據您需要的內容對其進行修改。