2013-10-06 10 views
6
private const int ItemsPerRequest = 10; 
[WebMethod] 
public RadComboBoxItemData[] GetAccount(object context) 
{ 
    RadComboBoxContext obj = (RadComboBoxContext)context; 
    DataTable data = GetDataAccount(obj.Text); 

    RadComboBoxData comboData = new RadComboBoxData(); 
    int itemOffset = obj.NumberOfItems; 
    int endOffset = Math.Min(itemOffset + ItemsPerRequest, data.Rows.Count); 
    comboData.EndOfItems = endOffset == data.Rows.Count; 

    List result = new List(endOffset - itemOffset); 

    for (int i = itemOffset; i < endOffset; i++) 
    { 
     RadComboBoxItemData itemData = new RadComboBoxItemData(); 
     itemData.Value = data.Rows[i]["AccountLevelNo"].ToString(); 
     itemData.Text = data.Rows[i]["AccountDesc3"].ToString(); 
     itemData.Attributes.Add("Level6", data.Rows[i]["AccountDesc2"].ToString()); 
     itemData.Attributes.Add("Level1", data.Rows[i]["AccountDesc1"].ToString()); 

     result.Add(itemData); 
    } 

    comboData.Items = result.ToArray(); 
    // comboData.Message = GetStatusMessage(endOffset, data.Rows.Count); 

    return comboData.Items.ToArray(); 
} 

private static DataTable GetDataAccount(string text) 
{ 
    int accCode = 0; 
    string query = "select COA.LevelAccountNo,COA.AccountDesc as AccountDesc3,Level1.AccountDesc as AccountDesc1, Level2.AccountDesc as AccountDesc2 from COA COA,(select LevelAccountNo,AccountDesc " + 
     "from COA where len(LevelAccountNo)=2)as Level1,(select LevelAccountNo,AccountDesc from COA where len(LevelAccountNo)=5)as Level2 " + 
     "where Level1.LevelAccountNo=left(COA.LevelAccountNo,2)and Level2.LevelAccountNo=left(COA.LevelAccountNo,5) and len(COA.LevelAccountNo)>6"; 

    try 
    { 
     accCode = Convert.ToInt32(text); 
     query = query + " COA.LevelAccountNo like '" + text + "%'";  
    } 
    catch (Exception ex) 
    { 
     query = query + " COA.AccountDesc3 like '%" + text + "%'"; 
    } 

    SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"].ToString()); 
    // string constr=ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

    SqlDataAdapter adapter = new SqlDataAdapter(query, con); 
    // adapter.SelectCommand.Parameters.AddWithValue("@text", text); 

    DataTable data = new DataTable(); 
    adapter.Fill(data); 
    con.Close(); 
    return data; 
} 

लागू करता है यह मेरा वेब सेवा कोडTelerik.Web.UI.RadComboBoxContext समर्थित नहीं है क्योंकि यह IDictionary

Collapse | Copy Code 
<telerik:RadComboBox ID="cboAccount" runat="server" Height="200" Width="200" EmptyMessage="Select an Account" 
    EnableLoadOnDemand="true" ShowMoreResultsBox="true" EnableVirtualScrolling="true"> 
    <HeaderTemplate> 
     <h3>Accounts</h3> 
    </HeaderTemplate> 
    <ClientItemTemplate> 
     <div> 
      <ul> 
       <li><span><b>Name:#= Text # </b></span></li> 
       <li><span>Level6 #= Attributes.Level6 # </span></li> 
       <li><span>Level1: #= Attributes.Level4 # </span></li> 
       <li><span>Level4 #= Attributes.Level1 # </span></li> 
      </ul> 
     </div> 
    <br></br> 
    </ClientItemTemplate> 
    <WebServiceSettings Method="GetAccount" Path="InvestmentDropDownWebService.asmx" /> 
</telerik:RadComboBox> 

मैं अपने प्रोजेक्ट में पहली बार वेब सेवा के लिए उपयोग कर रहा हूँ है। मुझे नहीं पता कि इस त्रुटि को कैसे हल किया जाए। अगर मैं aspx.cs चला रहा हूं तो यह पूरी तरह से चल रहा है और कॉम्बो बॉक्स में मूल्य बांधता है। विजुअल स्टूडियो डीबगर की वजह से

The type Telerik.Web.UI.RadComboBoxContext is not supported because it implements IDictionary.

+3

कोई आपको जवाब देने में सक्षम हो सकता है लेकिन ऐसे प्रश्न के लिए सबसे अच्छी जगह टेलीरिक मंच है। – FeliceM

उत्तर

2

यह समस्या उत्पन्न होती हैं: लेकिन जब मैं वेब सेवा का उपयोग करके बता गया करने के लिए मानों बंधन कर रहा हूँ, अपने एक त्रुटि देता है। यह इसके डिफ़ॉल्ट व्यवहार की वजह से है। इसके लिए एक कामकाज है। बदलें अपनी लाइन

[WebMethod] 

[WebMethod(EnableSession = true)] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 

और यह भी करने के लिए, RadCombo बॉक्स के अपने ASPX कोड में

WebServiceSettings-UseHttpGet="true" 

की एक विशेषता जोड़ें।
इस समस्या के बारे में अधिक जानकारी के लिए this question in Telerik forum देखें

0

समस्या का कारण (xml) क्रमबद्धता है। याद रखें, सीरियलाइजेशन-तंत्र प्लेटफार्म की शुरुआत में बनाया गया था, जेनेरिक-संग्रह/शब्दकोश के बाद अच्छी चीजें जोड़े गए थे। इसका मतलब है कि कार्यक्षमता जिसे आप अभी काम करने की उम्मीद करेंगे, प्रारंभिक विकास के दौरान संभव नहीं हो सकता है।

जो हमें शब्दकोश में लाता है। शब्दकोश का मूल वर्ग serialization का समर्थन नहीं करता है, क्योंकि serializer 'अज्ञात' प्रकारों को बहुत पसंद/संभाल नहीं करता है। चूंकि शब्दकोश '[ऑब्जेक्ट, ऑब्जेक्ट]' हो सकता है, यह अज्ञात प्रकार का स्वर्ग है।

इसी तरह की अज्ञात प्रकार की समस्या बनाने का एक दिलचस्प तरीका निम्नानुसार है।

  1. एक webservice बनाएं जो वर्ग 'ए' को पैरामीटर के रूप में अपेक्षा करता है।
  2. सेवा के लिए एक वेब-संदर्भ बनाएँ।
  3. 'ए' से प्राप्त वर्ग 'बी' बनाएं।
  4. अब एक पैरामीटर

के रूप में 'बी' का एक उदाहरण के साथ webmethod फोन अब आप कह रही है कि कॉल विफल हो गया क्योंकि 'टाइप बी अनपेक्षित था' एक त्रुटि संदेश मिल जाएगा। मुझे आशा है कि आप देख सकते हैं कि इन दो चीजों (अप्रत्याशित प्रकार/शब्दकोश) से संबंधित हैं ...

आप केवल एक xml serializer प्रकार यह डिजाइन समय

समाधान पर उम्मीद करने के लिए कहा गया था दे सकते हैं 'sohaiby' काम करेंगे क्योंकि वह एक्सएमएल-क्रमबद्धता उपयोग करने के लिए नहीं वेब सेवा कह रहा है, लेकिन लाइन में JSON का उपयोग करने की:

ResponseFormat = ResponseFormat.Json 

यह सब कहा जा रहा है, यह वास्तव में Telerics गलती है और वे इसे ठीक करना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे