2010-04-06 18 views
6

के साथ एएसपी.NET ग्रिड व्यू में 'अपडेट' पर क्लिक करें, मुझे एएसपीनेट ग्रिड व्यू में jQuery के साथ 'अपडेट' क्लिक ईवेंट कैप्चर करने की आवश्यकता है और कहां से शुरू करना है इसका कोई तरीका नहीं है। मैं अभी भी jQuery के लिए नया हूँ। मेरा ग्रिड व्यू SQLDataSource से जुड़ा हुआ है और, स्वाभाविक रूप से, सभी घंटियाँ और सीटी है कि वह संयोजन प्रदान करता है। किसी भी तरह की सहायता का स्वागत किया जाएगा।jQuery अद्यतन

+0

क्या है "अपडेट" है कि उपयोगकर्ताओं को क्लिक करेंगे: नीचे दिए गए कोड अद्यतन क्लिक करें घटना पर कब्जा करना चाहिए? –

उत्तर

8

आप स्क्रिप्ट ब्लॉक कहीं भी जोड़े जाने के बाद GridView घोषित किया जाता है और यह डिफ़ॉल्ट गैर टेम्प्लेट की GridView स्तंभ के साथ काम करना चाहिए। कोडबेइंड में कोई कोड नहीं है क्योंकि यह पूरी तरह जावास्क्रिप्ट समाधान है।

उपयोग यह आप एक लिंक प्रकार GridView स्तंभ उपयोग कर रहे हैं:

<script type="text/javascript"> 
    // a:contains(The text of the link here) 
    $('#<%= theGridViewID.ClientID %> a:contains(Update)').click(function() { 
     alert('Update click event captured from the link!'); 
     // return false: stop the postback from happening 
     // return true or don't return anything: continue with the postback 
    }); 
</script> 

उपयोग इस अगर आप एक बटन-प्रकार GridView स्तंभ का उपयोग कर रहे हैं और आप अपने जावास्क्रिप्ट पोस्टबैक ब्लॉक करने के लिए नहीं करना चाहती:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    $('#<%= theGridViewID.ClientID %> :button[value=Update]').click(function() { 
     alert('Update click event captured from the button!'); 
    }); 
</script> 

उपयोग यह आप एक बटन-प्रकार GridView स्तंभ का उपयोग कर रहे हैं और आप नियंत्रण करने पोस्टबैक या नहीं के साथ जारी रखने के लिए है कि क्या चाहते हैं:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    var updateButtons = $('#<%= theGridViewID.ClientID %> :button[value=Update]'); 
    updateButtons 
     .attr('onclick', null) 
     .click(function() { 
      alert('Update click event captured from the button!'); 
      var doPostBack = true; // decide whether to do postback or not 
      if (doPostBack) { 
       var index = updateButtons.index($(this)); 
       // 'Update$' refers to the GridView command name + dollar sign 
       __doPostBack('<%= theGridViewID.UniqueID %>', 'Update$' + index); 
      } 
     }); 
</script> 

अद्यतन: मुझे लगता है कि यह पिछले (3) स्क्रिप्ट मैं ऊपर प्रस्तुत ब्लॉक के प्रतिस्थापन में एक बेहतर समाधान हो जाएगा के बाद से आप मैन्युअल रूप से आदेश नाम के आधार पर __doPostBack समारोह कॉल अद्यतन करने के लिए की जरूरत नहीं होगी , और इस तरह, यह कम त्रुटि-प्रवण होना चाहिए:

<script type="text/javascript"> 
    // :button[value=The text of the button here] 
    var updateButtons = $('#<%= theGridViewID.ClientID %> :button[value=Update]'); 
    updateButtons.each(function() { 
     var onclick = $(this).attr('onclick'); 
     $(this).attr('onclick', null).click(function() { 
      alert('Update click event captured from the button!'); 
      var doPostBack = true; // decide whether to do postback or not 
      if (doPostBack) { 
       onclick(); 
      } 
     }); 
    }); 
</script> 

इस विचार के लिए अरिस्टोस को क्रेडिट। :)

+0

मैंने कहा कि ग्रिड व्यू घोषित होने के बाद स्क्रिप्ट ब्लॉक को कहीं भी रखा जाना चाहिए, लेकिन यदि किसी भी कारण से आप इसे पहले कहीं भी दिखाई देने के लिए आग्रह करते हैं (शायद मुख्य भाग में?), तो आप हमेशा स्क्रिप्ट को $ (function() {/* यहां स्क्रिप्ट्स * /}) ताकि स्क्रिप्ट केवल डीओएम तैयार होने के बाद ही निष्पादित की जाएगी। – Amry

+1

अच्छा काम मुझे तुम्हारा भी पसंद है। मेरा एकमात्र मेला यह है कि आप वास्तव में doPostBack को फिर से बनाने का प्रयास करते हैं - क्या ऑनक्लिक ईवेंट में वास्तव में नियंत्रण पर मौजूद होने का कोई तरीका है, इसे बदलने से पहले, इसे फ़ंक्शन वैरिएबल में सहेजें, और उसके काम के बाद इसे कॉल करें। – Aristos

+0

@ एरिस्टोस: वास्तव में अच्छा सुझाव। अजीब मैंने कभी किसी के बारे में सोचा नहीं। इसे शामिल करने के लिए मेरा उत्तर अपडेट किया गया, आपको क्रेडिट। :) – Amry

0

आपको क्लाइंट-साइड इवेंट श्रोता को अपडेट [लिंक] बटन के क्लिक ईवेंट में संलग्न करने की आवश्यकता है। मुझे नहीं लगता कि यह AutoGenerateEditButton = "true" का उपयोग करके किया जा सकता है यदि आप इसे इस तरह से कर रहे हैं। आपको टेम्पलेटफ़ाइल का उपयोग करने की आवश्यकता होगी ताकि आप बटन को कुशल बना सकें। फिर आप बटन के क्लिक ईवेंट से जुड़ने के लिए jQuery का उपयोग कर सकते हैं।

0

कॉलम टेम्पलेट्स में अद्यतन कॉलम जोड़ें। इसे एक कस्टम कॉलम में कनवर्ट करें, और इसे इस तरह संशोधित करें कि आप इसे jquery i.e. के साथ हुक कर सकते हैं जैसे कि एक सीएसएस क्लास जोड़ना।

2

ठीक है यहां एक बटन से केवल एक अपडेट (या अधिक) को पकड़ने का मेरा समाधान है।

यह जावास्क्रिप्ट कोड है कि मैं अद्यतन क्लिक पर

<script type="text/javascript">   
    function NowRunTheUpdate(){ 
     alert("ok I capture you"); 
    } 
</script> 

चलाने के लिए और यहाँ है पेज कोड

`<asp:GridView ID="MyGridView" runat="server" OnRowDataBound="MyGridView_RowDataBound" ... >` 

    <asp:ButtonField Text="update" CommandName="Update" ButtonType="Button" /> 
    ... 

है यहाँ कोड के पीछे चलाने के लिए और जावास्क्रिप्ट सेट thats है।

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // loop all data rows 
     foreach (DataControlFieldCell cell in e.Row.Cells) 
     { 
      // check all cells in one row 
      foreach (Control control in cell.Controls) 
      { 
       // I go to get the button if exist 
       Button button = control as Button; 
       if (button != null && button.CommandName == "Update") 
        // Add delete confirmation 
        button.OnClientClick = "NowRunTheUpdate();"; 
      } 
     } 
    } 
} 
0

ग्रिडव्यू "tr" और "td" के समूह के साथ एक टेबल के अलावा कुछ भी नहीं है। यदि आप उस अवधारणा को समझते हैं तो क्लाइंट साइड पर कुछ भी संभालना आपके लिए आसान होगा। यदि आपने ऑटो सब कुछ सक्षम किया है तो यह एक लिंक होगा जो संपादन, हटाएं, अपडेट या रद्द करने के लिए परिणाम देगा (देखें स्रोत देखें)।- यह एक बटन, एक लिंक, या कुछ और है

$("a:contains(Update)").live("click", function() { 
    //alert("hi"); do what needs to be done 
    return false;//would not sent the control back to server 
    }); 

HTH

+0

@Raja मुझे यह विचार पसंद है - अगर आपके पास कई ग्रिड हैं, तो कुछ काम की ज़रूरत है, और सुनिश्चित करें कि अन्य अपडेट बटनों के साथ संघर्ष न करें लेकिन मुझे यह पसंद है। इसके अलावा आपको jQuery की आवश्यकता है लेकिन मैं इसे वैसे भी उपयोग करता हूं। और मेरे विचार से बेहतर हिस्सा यह है कि आपको ग्रिड को कोड-बैक पर लूप करने की आवश्यकता नहीं है। मैं इसका परीक्षण करने की कोशिश करूंगा और शायद इसका इस्तेमाल करूंगा। – Aristos

+0

@ राजा मैं अभी कोड देखता हूं और मुझे लगता है कि इसकी कुछ और आवश्यकता है - अगर आप उस पर मदद कर सकते हैं। यह लिंक नहीं है लेकिन इनपुट है, और फिर इनपुट पोस्टबैक ऑनक्लिक बनाते हैं। आप पोस्टबैक को कैप्चर और सेव कैसे कर सकते हैं कि इनपुट के अंदर सभी तैयार मौजूद हैं (jQuery का उपयोग करके? – Aristos

+0

@Raja <इनपुट प्रकार = "बटन" वैल्यू = "अपडेटमे" ऑनक्लिक = "जावास्क्रिप्ट: __ डूपोस्टबैक ('सीटीएल 00 $ मायग्रिडनाम', 'अपडेटमे $ 1 ') "/> यहां वह कोड है जिसे आपको अपना ऑनलिक डालने की ज़रूरत है। क्या आप मदद कर सकते हैं? – Aristos

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