2012-06-12 3 views
1

Я пытаюсь получить значение KeyField из FocusedRow в devexpress aspxGridview.Javascript QueryString to 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 в жерех разметке

    <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> 
    
  • Backend C# код для разрешения строки запроса

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

Вещь я могу» t, чтобы выяснить, почему QueryString не разрешен. После некоторого расследования по inte rwebs я не могу найти достойное решение, так вот почему я спрашиваю здесь. Надеюсь, кто-то может помочь

+0

Где вы не можете решить строку запроса? Происходит ли ошибка на странице? Вы не видите значение в вашей «Page_Load» codebehind? – 48klocs

+0

@ 48klocs в порядке, я решил проблему плохой привязки данных, но querystring по-прежнему отображается пустым –

+1

Используйте скрипач или firebug, чтобы проверить, что отправляется по проводу. Кроме того, на основе этого вопроса (http://stackoverflow.com/questions/3643041/setting-javascript-window-location) кажется, что вы должны использовать свойство window.location.href. –

ответ

2

Хорошо, сначала у вас нет 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" /> 

Client Side Event:

<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>"); 
    } 

Это из тестового приложения я создал для вашего вопроса. Он обновит окно адреса браузера (только в IE9) с FocusedRowKeyField, когда изменяется строка фокусировки.Он также вызовет скрипт в коде, за которым также появится предупреждение с этим значением. Событие Page_Load будет запущено с каждым изменением строки фокусировки, вы можете изменить это на основе того, что вам нужно.