2012-03-15 15 views
0

Telerik RadGridコントロールのクライアントサイドバインディングに関する質問があります。私は、クライアントサイドの都市をグリッドに配置したいと思います。私はjQueryのAjaxとWCFを使用してクライアント側にJSONオブジェクトとして、このデータを取得RadGridクライアント側バインド

[DataContract] 
[KnownType(typeof(Country))] 
public class City 
{ 
    [DataMember] 
    public virtual string CityCode { get; set; } 

    [DataMember] 
    public virtual string CityName { get; set; } 

    [DataMember]} 
    public virtual Country Country  { get; set;    
    } 
} 

[DataContract] 
public class Country 
{ 
    [DataMember] 
    public virtual string CountryCode { get; set; } 
    [DataMember] 
    public virtual string Iso2Code { get; set; } 
    [DataMember] 
    public virtual string CountryName { get; set; } 
    [DataMember] 
    public virtual char RDC { get; set; } 

} 

:私は、プロパティの国を持つオブジェクトの市を、持っています。 そして私は、グリッドにバインド:ここ

rgCity.set_dataSource(dataItem); 
rgCity.dataBind(); 

は、グリッドの列の定義です:

<Columns> 
    <telerik:GridBoundColumn HeaderText="City Code" DataField="CityCode" MaxLength="3">  </telerik:GridBoundColumn> 
    <telerik:GridBoundColumn HeaderText="City Name" DataField="CityName"></telerik:GridBoundColumn> 
    <telerik:GridBoundColumn HeaderText="Country Code" DataField="CountryCode" MaxLength="2"></telerik:GridBoundColumn> 
</Columns> 

問題は、私はデータが移入国コード列が届かないです。私は問題はデータバインディングだと思うが、複雑なオブジェクトをバインドすることが可能かどうかはわからない。私はその問題を解決するための任意の助けに感謝

<telerik:GridBoundColumn HeaderText="Country Code" DataField="**City.CountryCode**" MaxLength="2"></telerik:GridBoundColumn> 

: 私はそのようなものであるべきだと思います!

答えて

0

私はあなたがそのような複雑なデータバインディングを行うことはできないと思います。代わりに、私は国コードを直接返してからバインドする新しいプロパティを作成します。例:

[DataContract] 
[KnownType(typeof(Country))] 
public class City 
{ 
    ... 

    [DataMember]} 
    public virtual CountryCode{ get Country.CountryCode; } 
} 

グリッドのための宣言型データバインディングは、あなたが持っていたものです:

<Columns> 
... 
<telerik:GridBoundColumn HeaderText="Country Code" DataField="CountryCode" MaxLength="2"></telerik:GridBoundColumn> 

+0

を書くことができ機能を上書きすることは、 –

+0

問題ありません:-)そのようなソリューションをいただき、ありがとうございます。どうしたの?あなたが助けてくれたと思ったら、それを受け入れられた答えとして親切にマークしてください。役に立たなかった場合は、他に何ができるのか教えてください。 – msigman

+0

@EvgeniyOそれを解決するために他に何ができますか? :) – msigman

1

あなただけ を置き換えることにより、 Telerik.Web.UI.GridTableView.dataBind機能を上書きすることができます元の小型化されたtelerikスクリプトの抜粋:

var J = r[v].get_uniqueName(); 
      var n = this.getCellByColumnUniqueName(H, J); 
      if (!n) { 
       continue; 
      }var D = r[v]._data.DataField; 
      if (typeof (D) == "undefined") { 
       D = J; 
      } var h = this._dataSource[u][D]; 
      if (h == null) { 
       h = ""; 

何かを、例えば、次のように次のように

var J = r[v].get_uniqueName(); 
      var n = this.getCellByColumnUniqueName(H, J); 
      if (!n) { 
       continue; 
      }var D = r[v]._data.DataField; 
      if (typeof (D) == "undefined") { 
       D = J; 
      } 
      //change here to eval the dataField 
      var h = AvoidEvalDueToPerformance(this._dataSource[u], D); 
      if (h == null) { 
       h = ""; 

AvoidEvalDueToPerformance関数が定義されています

function AvoidEvalDueToPerformance(object, propertyString) { 
    var k = propertyString.split("."); 
     for (var i = 0; i < k.length; i++) 
      if (object[k[i]]) object = object[k[i]]; 
      else return object; 
    return object; 
} 

希望これは私がの答えを探しにつまずいた最初の結果であったとして、これは誰かに役立ちます質問 "複雑なオブジェクトのクライアントサイドにRadGridをバインドする方法"
PSあなたは

Telerik.Web.UI.GridTableView.dataBind.prototype = function(){ 
    //copy-paste the Telerik.Web.UI.GridTableView.dataBind.prototype contents 
    //from your favorite javascript debugger output 
    //(or grep output or w/e you prefer) here :)<br /> 
} 
関連する問題