2015-06-18 6 views
8

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

public static DataTable GetDataTable() 
     { 
      DataSet ds = new DataSet();   
      SqlCommand cmd = new SqlCommand("StoredProcedurename"); 
      String constr = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; 
      SqlConnection con = new SqlConnection(constr); 


      string Startdate = DateTime.Now.ToString("yyyy-MM-dd"); 
      string EndDate = Convert.ToDateTime(Startdate).AddMonths(-6).ToString("yyyy-MM-dd"); 
      cmd.CommandType = CommandType.StoredProcedure;  
      cmd.Parameters.AddWithValue("@FromDate", Startdate); 
      cmd.Parameters.AddWithValue("@ToDate", EndDate); 
      cmd.Connection = con; 
      SqlDataAdapter sda = new SqlDataAdapter(cmd);  

      sda.Fill(ds); 

      //i want to use same dataset to bind with the grid 
      gridToBind.DataSource = ds.Tables[1]; 
      gridToBind.DataBind(); 
      txtStatus.Text="Data Received"; 
      //above three lines throws error. 

      return ds.Tables[1]; 

     } 

और हो रही त्रुटि "एक वस्तु संदर्भ गैर स्थिर क्षेत्र, विधि, या संपत्ति के लिए आवश्यक है"

+0

बस 'gridToBind.DataSource = ds'? और अपने 'डेटटाइम' मानों को एक चरित्र के रूप में संग्रहित न करें। –

+1

यह काम नहीं कर रहा है.ठीक है, मैं उस स्ट्रिंग पैरा को बदल दूंगा। मेरा ध्यान केवल ग्रिडव्यू को बांधना है .. – Athul

+0

http://www.aspsnippets.com/Articles/Dynamically-load-and-display-ASPNet-UserControl-using -jQuery-AJAX-and-WebMethod.aspx –

उत्तर

9

आप जो भी चाहते हैं वह नहीं कर सकते हैं।

आप स्थिर और उदाहरण के बीच अंतर को गलत समझ रहे हैं। उदाहरण के लिए आपका पृष्ठ सैकड़ों अलग-अलग व्यक्तियों द्वारा उपयोग किया जा सकता है। प्रत्येक व्यक्ति को आपके पृष्ठ के विभिन्न उदाहरण परोसा जाएगा और प्रत्येक व्यक्ति को ग्रिड व्यू के विभिन्न उदाहरण दिखाई देंगे। दूसरी ओर, चूंकि आपका वेबमाइट स्थिर है, इन सभी सैकड़ों अलग-अलग व्यक्तियों को एक विधि की सेवा की जाएगी।

फिर आपकी स्थिर विधि कैसे तय कर सकती है कि कौन सी सेवा करे? यह नहीं कर सकता

यदि आप AJAX से ग्रिड दृश्य को पॉप्युलेट करना चाहते हैं, तो आपको अपने वेबमेड से डेटा वापस भेजने की आवश्यकता है, एक उदाहरण here देखें।

Why WebMethod are static और जानने के लिए निम्न आलेख पढ़ें।

+0

इसका मतलब है कि साइट का उपयोग करने वाले 100 उपयोगकर्ता स्थिर वेबमैट.आई. के समान उदाहरण का उपयोग करेंगे? तो सही प्रदर्शन प्रभावित होगा या नहीं? –

+1

असल में प्रदर्शन थोड़ा बेहतर होगा क्योंकि 100 उदाहरण बनाने की आवश्यकता नहीं होगी। लेकिन यह केवल थोड़ा सा है। –

+0

यह वेबमाइड कैसे काम करता है? पहली अनुरोध प्रक्रिया फिर दूसरी या simoutaneously? –

3

आप तो आप किसी भी नियंत्रण का उपयोग करने के लिए सक्षम नहीं होंगे स्थिर विधि का उपयोग करने जा रहे हैं पृष्ठ का, क्योंकि वे किसी ऐसे पृष्ठ की श्रेणी से संबंधित हैं जिसमें स्थिर दायरा नहीं है। स्थैतिक विधि में आपको केवल स्थिर डेटा, नियंत्रण इत्यादि का उपयोग करने की इजाजत है। संभावित समाधान यह है कि आपको अपने माता-पिता वर्ग यानी क्लासिक विधि में पेज क्लास का एक नया उदाहरण बनाना होगा और बाद में आप पेज के सभी नियंत्रणों को एक्सेस कर सकते हैं । इस तरह ..

public static <ReturnType> MethodName 
{ 
Class instance=new Class(); 
instance.GridView.DataSource=ds; 
instance.GridView.DataBind(); 
} 

लेकिन दिए गए जिस तरह से करता है, तो डेटा वापस बनाए रखने के लिए, के रूप में instnace नया तो पुराने डेटा प्लावित किया जाएगा चाहते हैं काम नहीं करता।

+0

उदाहरण। GridView त्रुटि फेंकता है। – Athul

+1

इससे 'फॉर्म' का 'नया उदाहरण' और 'नया उदाहरण' का 'ग्रिडव्यू' पॉप्युलेट हो जाएगा। यह 'मूल रूप' पर 'ग्रिड व्यू' को पॉप्युलेट नहीं करेगा, इसलिए यह सही दृष्टिकोण नहीं है। – Mairaj

2

आप static method पर ग्रिडव्यू के पास भेज सकते हैं और गर्डव्यू को बांध सकते हैं।

आप class के new उदाहरण बनाने के लिए और स्थिर विधि कॉल यदि यह create new form और all controls कि specific instance तो original form पर gridview से भरा जा कभी नहीं होगा के लिए created होगा।

यहां एक उदाहरण है कि आप संदर्भ और बाइंड्रिडव्यू कैसे पारित कर सकते हैं।

protected void Page_Load(object sender, EventArgs e) 
{ 
    GridView grd = grdTest; //grdTest is Id of gridview 
    BindGrid(grd); 

} 
public static void BindGrid(GridView grd) 
{ 
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)) 
    { 
    SqlCommand cmd = new SqlCommand("select* from testtable", con); 
    SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    adapter.Fill(dt); 
    grd.DataSource = dt; 
    grd.DataBind(); 
    } 
} 
+0

मैं एक वेबमाइंड के अंदर सार्वजनिक स्थैतिक डेटाटेबल GetDataTable() विधि को कॉल कर रहा हूं .. पेज_लोड से नहीं। आपके उत्तर पर आवश्यक सभी परिवर्तन क्या हैं। – Athul

+0

आपको डेटा वापस करने और AJAX की सफलता में HTML बनाने की आवश्यकता है। – Mairaj

2

समस्या static मुख्य शब्द के साथ नहीं है, यह वेब विधि कीवर्ड के साथ है,
जब asp.net नियंत्रण पद पीठ,
यह सर्वर पर पूरे रूप ले लिया इसलिए अपने सर्वर से प्रत्येक नियंत्रण प्राप्त कर सकते हैं के रूप में।

जबकि वेब विधि केवल डेटा है कि आप इसे मानकों के माध्यम से पारित किया है, तो यह और भी उपलब्ध नियंत्रण का नाम पता नहीं है कि आपके एएसपी पेज में

आप 2 विकल्प
तो निकालने webmethod है और इसे वापस पोस्ट करते हैं या
टेबल, टीआर, टीडी
द्वारा jquery से अपना ग्रिडव्यू बनाएं, वेब विधि के पैरामीटर में गुजरने वाले ग्रिडव्यू के बारे में मुझे कभी भी पता नहीं है, लेकिन आप सोचते हैं कि आप इसे केवल (यदि संभव हो) पढ़ सकते हैं, बाध्यकारी संभव नहीं है

1

समस्या यह है कि आपके पास यह एएसपीनेट वेबफॉर्म कैसे करता है डेटा इसके नियंत्रण के लिए बाध्य है।

जब आप सामान्य पोस्टबैक में होते हैं और आप कुछ डेटा के साथ ग्रिडव्यू डेटासोर्स को पॉप्युलेट करते हैं, तो यह डेटा ग्रिडव्यू व्यूस्टेट में "रिकॉर्ड किया गया" होता है और फिर ब्राउजर में _VIEWSTATE नामक एक छिपे हुए क्षेत्र में प्रस्तुत किया जाता है और यह वह जगह है जहां आप समस्या है।

जब आप AJAX कॉल करते हैं और अपनी (स्थिर) वेब विधि का आह्वान करते हैं तो आपके सर्वर नियंत्रण मौजूद नहीं होते हैं क्योंकि आपके पास पूर्ण पृष्ठ चक्र नहीं होता है।

आप क्या कर सकते हैं बाद में हैंडलिंग के लिए सत्र में अपना डेटा स्रोत सहेज सकते हैं।

अपने JQuery AJAX कॉल के संबंध में, आपको इसे मैन्युअल रूप से संभालना होगा, शायद नॉकआउट जैसी लाइब्रेरी का उपयोग करना या आप अपने वर्तमान jquery AJAX कॉल को एक छिपे हुए बटन के लिए प्रतिस्थापित कर सकते हैं जहां आप अपना वर्तमान कोड डाल देंगे और अपना ग्रिडव्यू और यह डाल देंगे अपडेटपैन के अंदर बटन और आंशिक अद्यतन करें।

1

आप इस तरह से कर सकते हैं, स्थैतिक विधि से डेटाटेबल लौट सकते हैं।

public static DataTable GridData(string para1, string para2) 
    { 

     using (SqlConnection con = new SqlConnection(strconn)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       con.Open(); 
       cmd.CommandText = "SP_Name"; 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@para1", para1); 
       cmd.Parameters.AddWithValue("@para2", para2); 
       cmd.Connection=con; 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       con.Close(); 
       return dt; 
      } 
     } 
    } 

[WebMethod] 
    public static List<ClassName> BindGridData(string para1,string para2) 
    { 
     DataTable dt = ClassName.GridData(para1, para2); 
     List<ClassName> list = new List<ClassName>(); 
     foreach (DataRow dr in dt.Rows) 
     { 
      ClassName pa = new ClassName(); 
      pa.para1 = Convert.ToString(dr["para1"]); 
      pa.para2 = Convert.ToString(dr["para2"]); 
      list.Add(pa); 
     } 
     return list; 
    } 

और जे वेब क्वेरी और अजाक्स को इस वेब विधि को बांधें।

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