2009-08-27 18 views
7

मैं एक asp.net gridview कि मूल रूप से एक SQLDataSource नियंत्रण करने के लिए बाध्य कर रहा है अंदर asp.net gridview में काम नहीं कर रहा है, लेकिन जब उपयोगकर्ता किसी बाहरी बटन दबाता है, यह बजाय एक से एक datatable की सामग्री हो जाता है बल्कि SQLdatasource नियंत्रण। इसलिए मैं पेजिंग के लिए अनुमति देने के लिए gridview की PageIndexChanging घटना में कोड लिखना पड़ा।पेजिंग AJAX UpdatePanel

Protected Sub gvEvents_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvEvents.PageIndexChanging 

gvEvents.PageIndex = e.NewPageIndex 

gvEvents.DataBind() 

इस खूबसूरती से काम किया तो पूरे पृष्ठ हर बार यह पृष्ठांकित postback नहीं होता है, और पेजिंग काम करना बंद कर जब तक मैं एक AJAX अद्यतन पैनल कहा: मेरे कोड इस प्रकार है। मैं इसे डिबग और कहा कि यह वास्तव में PageIndexChanging घटना बुला रहा है, लेकिन कुछ भी हो रहा है।

मैं वेब खोज की है और एक ही समस्या के साथ कुछ लोगों ने पाया है, लेकिन उनके समाधान मेरे लिए काम नहीं किया। इस साइट जिसका समस्या का पालन करके हल किया गया था पर एक था:

PageIndexchanging घटना में, जहां ग्रिड से डेटा बाँध, यह सुनिश्चित कर लें, डेटा को फिर से डीबी

मैं डॉन 'से लाई गई है टी नहीं जानता कि इसका क्या अर्थ है; मेरा डेटा ऊपर दिखाए गए अनुसार बाध्य किया जा रहा था। मेरे पास "पेजिंग सक्षम करें" को सत्य पर सेट किया गया है और EnableSortingAndPagingCallbacks को गलत पर सेट किया गया है।

मैं वास्तव में अगर कोई मेरी मदद कर सकते सराहना करेंगे। मैं नीचे अद्यतन पैनेल के लिए अपने मार्कअप शामिल कर रहा हूँ। आपको बहुत - बहुत धन्यवाद!

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ibtnSearch" />   
     </Triggers> 

     <ContentTemplate> 

      <asp:GridView ID="gvEvents" runat="server" DataKeyNames = "intID" 
       AutoGenerateColumns="False" AllowPaging="True" GridLines="None" CellPadding="10" 
       ForeColor="#333333" PageSize="6" DataSourceID="defaultDS" > 
       <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 

       <Columns> 
        <asp:TemplateField HeaderText="Date"> 
         <ItemTemplate> 
         <!-- put code block inside label? To set the formatter to include year if 
         it's next year? --> 
         <asp:Label ID="Label1" runat="server" 
          Text = '<%# RepeatingMethods.DetermineOngoing(CType(Eval("dtmEventStartDate"), DateTime) , CType(Eval("dtmEventEndDate"), DateTime))%>'> </asp:Label> 

        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <ItemTemplate> 
        <asp:Label ID="Label4" runat="server" Text='<%# Eval("chvAgeRange") %>'> </asp:Label> <br /> 
        <asp:Label ID="Label3" runat="server" Text= '<%# Eval("chvState") %>'> </asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:HyperLinkField DataNavigateUrlFields="intId" 
        DataNavigateUrlFormatString="EventDetail.aspx?intId={0}" 
        DataTextField="chvEventName" /> 

        <asp:BoundField DataField="chvBriefDescription" HeaderText="Description" 
         SortExpression="chvBriefDescription" /> 


      </Columns> 
        <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
        <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> 
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> 
        <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
        <AlternatingRowStyle BackColor="White" /> 


<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></FooterStyle> 

<PagerStyle HorizontalAlign="Center" BackColor="#FFCC66" ForeColor="#333333"></PagerStyle> 

<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy"></SelectedRowStyle> 

<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></HeaderStyle> 

<AlternatingRowStyle BackColor="White"></AlternatingRowStyle> 
    </asp:GridView> 



       <asp:Label ID="lblError" runat="server"></asp:Label> 

    <br /> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
+0

मैं आपके डेटास्रोत कोड को भी नहीं देख सकता। searchConnection.Open() searchCommand = नई SqlCommand (searchString, searchConnection) searchAdapter = नई SqlDataAdapter (searchCommand) searchDatatable = नई - –

+0

यहाँ यह (मैं यह सब में नहीं डाल सकते कि यह एक लंबे समय के उप है) का हिस्सा है DataTable searchAdapter.Fill (searchDatatable) तो searchDatatable.Rows.Count> 0 फिर gvEvents.DataSourceID = कुछ भी नहीं gvEvents.DataSource = searchDatatable gvEvents.DataBind() –

उत्तर

2

PageIndexchanging घटना है, जहां आप ग्रिड के लिए डेटा बाँध में, डेटा को फिर से डीबी मैं नहीं जानता कि क्या मतलब से प्राप्त की है सुनिश्चित करें; मेरा डेटा ऊपर दिखाए गए अनुसार बाध्य किया जा रहा था।

इसका मतलब है कि आपको पृष्ठ के पीछे अपने कोड में फिर से अपना डेटा लाने की आवश्यकता है। आप अपने डिज़ाइन/एचटीएमएल पेज में SQLDatasource का उपयोग कर रहे हैं, इसलिए आपको इसे हटाने और अपने डेटा लाने के लिए एसक्यूएल कनेक्शन, एसक्यूएल कमांड इत्यादि का उपयोग करने की आवश्यकता है और फिर इसे अपने नियंत्रण के डेटासोर्स के रूप में सेट करें।

कुछ नीचे की तरह:

http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-vb.aspx

आपका कोड इस

Protected Sub Page_Load(...) 
    gvEvents.PageIndex = 0 
    LoadData();// loads initial data 
end sub 

private sub LoadData() 
'' do your SQL Conn and Command here 
'' set your datasource of gridview here 
end sub 

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging 
    gvEvents.PageIndex = e.NewPageIndex 
    LoadData() 
    gvEvents.DataBind() 
end sub 
+0

मैं माफी चाहता हूँ अगर मैंने नहीं किया खुद को स्पष्ट करो। मैं अपने डेटा लाने के लिए एसक्यूएल कनेक्शन और कमांड का उपयोग कर रहा हूं - ग्रिडव्यू के लिए मेरा डेटासोर्स एक डाटाटेबल है। मेरी समस्या यह है कि जब तक मैं इसे अद्यतन पैनल में नहीं डालता, तब तक मेरा कस्टम पेजिंग कोड ठीक काम करता है, और अब यह नहीं करता है। मुझे अचानक डेटाबेस से अपना डेटा फिर से लाने की आवश्यकता क्यों होगी? –

+0

क्योंकि आपके डीबी से डेटा लगातार आपके ग्रिडव्यू/पेज में संग्रहीत नहीं होता है। जब आप किसी अपडेट पैनल के अंदर पोस्टबैक करते हैं, तो आपको रिकॉर्ड्स फिर से लाने की आवश्यकता होती है ताकि आप इसे ग्रिडव्यू पर लोड कर सकें क्योंकि उस समय, आपके डेटा स्रोत में कोई डेटा नहीं है। –

+0

नमूना कोड –

1

नियंत्रण कि UpdatePanel साथ संगत नहीं हैं कुछ ऐसा दिखाई देगा नियंत्रित करता है

निम्नलिखित ASP.NET नियंत्रण आंशिक-पृष्ठ अपडेट के साथ संगत नहीं है, और इसलिए UpdatePanel नियंत्रण के अंदर समर्थित नहीं है:

GridView और DetailsView नियंत्रण उनके EnableSortingAndPagingCallbacks संपत्ति सही पर सेट किया जाता है। डिफॉल्ट गलत है।

http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx

1

बस DataBind के बाद AJAX के पैनल को अद्यतन()।

मान अद्यतन पैनल की आईडी AJAXPanel

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging    
    gvEvents.PageIndex = e.NewPageIndex 
    LoadData() 
    gvEvents.DataBind() 
    // The below line refreshes the update panel.. 
    AJAXPanel.Update() 
end sub 
2

जो कोई भी इस समस्या का सामना करते ठोकर के लिए है, मैं इसे इस AM का सामना करना पड़ा और इस पोस्ट को गुमराह किया गया था (कम से कम मेरी परिदृश्य के लिए)। मेरे लिए, मुझे बस एक पेज इंडेक्स चेंजिंग इवेंट को अपडेटपेल ट्रिगर के लिए अपने डेटाग्रिड के लिए एक ट्रिगर के रूप में जोड़ना पड़ा, और यह मेरी समस्या का समाधान कर रहा था।

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