سؤال

وأنا خلق واجهة ويب الذي يقرأ حاليا البيانات في من ملف بيانات XML، يوزع ذلك إلى مجموعة من الأجسام، وبعد ذلك أنا ربط إلى مصدر البيانات من Gridview. وبعد ذلك استخدام ولاسترداد البيانات أريد من الكائنات لكل عمود.

ولكن، وأنا في هذه النقطة التي أود أن يكون العديد من علامات التبويب في هذا gridview، وربما تسيطر عليها أزرار صلة مختلفة. أن كل علامة تبويب تظهر مجموعة مختلفة من الأعمدة.

وماذا سيكون أفضل وسيلة لتنفيذ ذلك؟ هل أنا بحاجة إلى ثلاثة GridViews منفصل في صفحتي، وتظهر فقط واحد التي المستخدم اختيار (هذه البيانات تعتمد على النقر على زر وصلة)، في حين يختبئ جميع الآخرين؟ هذا يبدو وكأنها قد يكون بطيئا دون داع. هل من الممكن أن تفعل عبر GridView واحد؟

والآن يرد GridView كامل في لجنة تحديث AJAX، مع رمز أدناه:

<asp:Panel id="searchResultsGrid" runat="server" CssClass="searchResultsGrid">
    <asp:GridView id="gridViewSearchResults" runat="server" AutoGenerateColumns="false" 
                    AllowPaging="True" AllowSorting="True" 
                    PageSize="25" Width="920" PagerSettings-Visible="false">
    <Columns>
        <asp:templatefield headertext="Test Column 1 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 2 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 3 Tab 1" HeaderStyle-HorizontalAlign="Left">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 4 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 5 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 6 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>
        <asp:templatefield headertext="Test Column 7 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
            <itemtemplate>
                <%# GetColumnInfo() %>
            </itemtemplate>
        </asp:templatefield>                                                                                                    
    </Columns>
    <RowStyle CssClass="searchResultEntry borderTopGrey" />         
    <EmptyDataTemplate>
        <p class="searchResultsEmpty">
            <asp:Label ID="lblSearchResultsEmpty" runat="server" Text="No records matched the selected criteria.  Please revise your criteria and try again." CssClass="searchResultsEmpty"></asp:Label>
        </p>
    </EmptyDataTemplate>                
    </asp:GridView>
</asp:Panel>

وهذا هو رمز لدي حاليا لgridview واحد، مع محتوى التبويب واحد. وبناء على استجابة جدك، وكيف أذهب حول إضافة TemplateFields أخرى لعلامات التبويب الثانية والثالثة، ومن ثم التبديل بين عرض مجموعات مختلفة عند النقر على زر الرابط التبويب؟

وشكرا!

هل كانت مفيدة؟

المحلول

وسلسلة الصفحة حالة العرض يمكن أن تصبح جدا (لا داعي له) كبيرة عند وجود GridViews متعددة (عرض الناتجة شفرة المصدر HTML، والبحث عن "__VIEWSTATE" لرؤيته). يمكنك استخدام تحكم GridView واحد، كما قلت لك، والبيانات مبادلة المناسبة في ذلك تبعا التي LinkButton (المعروف أيضا باسم "علامة التبويب") قد تم اختيار مؤخرا.

وإذا كان هذا هو أيضا سيناريو البيانات مرقما، يمكنك تخزين مجموعة بسيطة من ثلاثة أعداد صحيحة في حالة العرض يمثل رقم الصفحة الحالية من كل من المجموعات الثلاث من البيانات، حتى تتمكن من عرض الصفحة أحدث البيانات عند مبادلة لهم الدخول والخروج من التحكم DataGrid واحد.

ولكن إذا عرض النطاق الترددي ليست مصدر قلق (أي إذا كانت الصفحة لا يحصل على الكثير من الزيارات أو يعمل على إنترانت) ثم لا تقلق الكثير عن تحسين ذلك.

نصائح أخرى

ولقد فعلت أشياء مماثلة من قبل. كنت الأعمدة قالب لGridView. ووضع href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/Tabs/Tabs.aspx" rel="nofollow اياكس تحكم أدوات تحكم علامة التبويب في GridView.

وأنا ربما إنشاء عنصر تحكم مخصص المركب (كما حاوية المبوب) وإضافة إلى عرض الشبكة لذلك. وأود أن لا حزمة ليصبح واحدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top