الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اعرض حقل واحد فقط على ثلاث اعمدة في قريد فيو

بدأه ضاري في 29 يناير 2010 · 6 رد · 817 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اضن الكتاب باين من عنوانه

ياليت اخواني اقدر اعرض حقل واحد في ثلاث اعمدة بالقريد فيو

مثلا

لدي قاعد بيانات اسمها book

بها جدول اسمه user

هذا الجدول فيه حقل واحد فقط وهو ID

اريد ان اعرض جميع سجلات الحقل id في قريد فيو على ثلاث اعمده ولنفرض انه يوجد 30 سجل مخزن بالحقل ID

ايد ان اعرض كل 10 سجلات في عمود ليصبح الاعمده ثلاث في كل عمود 10 سجلات

اتمنى انها وصلت الفكره

ياليت اخواني تساعدوني ولكم جزيل الشكر

#2

وينكم يامبرمجين اريد المساعده الله يجزاكم خير

مازلت بانتظاركم

−1
#3

لا توجد طريقة مباشرة لعمل هذا. لذا عليك أن تشمر ساعديك. حيب ما أرى هناك طريقتين. اختر منها ما يناسبك.

1. بناء جدول DataTable يدوياً تعبئ فيه البيانات بالطريقة التي تناسبك ثم ربطها بالـgridview

2. عدم استخدام الـgridview نهائياً و بناء html table يدوي من البيانات الموجودة.

#4

اشكرك اخي سيستم على التوضيح ولكن هل يوجد مثال او اكواد لاحد الطريقتين

#5

الأخ الكريم / ضاري

السلام عليكم ورحمة الله وبركاته

وبعد التحية، ما تريد أن تفعله ممكن بطريقتين الأولى هي بإستخدام الـ GridView وهي صعبه وتحتاج إلى جهد كبير كما أشار الأخ System Down، والثانية سهلة جدا عن طريق إستخدام الـ ListView. وأنا من رأي أن تختار الخيار الثاني وذلك لسبب بسيط جدا وهو المقولة المشهورة (Work smart, don't work hard). قبل أن أريك الكود دعني أوضح لك طريقة إستخدام الـ ListView:

يعتمد إستخدامها عن طريق تحديد قالب وبناء عليه سيتم تكريرة على حسب عدد الصفوف الموجود في الـ DataSource، دعنا نأخذ مثالا:

<asp:ListView ID="myListView" runat="server" DataSourceID="myDataSource" ItemPlaceHolderID="myItem">
	<LayoutTemplate>
		<ul>
			<asp:PlaceHolder id="myItem" runat="server" />
		</ul>
	</LayoutTemplate>
	<ItemTemplate>
		<li>
			<%# Eval("name") %>
		</li>
	</ItemTemplate>
</asp:ListView>

لاحظ في الـ LayoutTemplate قمنا بتحديد شكل القالب الذي نريد وفي داخلة asp:ItemPlaceHolder وله ID بإسم myItem (بشكل إفتراضي يكون الـ ID هو itemPlaceHolder)، بعد ذلك قمنا بتحديد شكل الـ ItemTemplate وهذا سيقوم بكاتبة محتواه داخل myItem فلو قلنا أن نتائج الـ DataSource هي من 1 إلى 5 وأنه لدينا حقل بإسم name في الجدول الموجود في قاعدة البيانات سيكون المخرج النهائي هو

<ul>
	<li>1</li>
	<li>2</li>
	<li>3</li>
	<li>4</li>
	<li>5</li>
</ul>

هذا ليس كل شيء عن الـ ListView حيث أن من خلالها يمكنك تحديد مجموعات Groups وأيضا يمكنك تحديد العدد الذي بعده يتم إعادة بناء القالب من جديد وهو ما تريده بالضبط حيث أن طلبك كان هو تكرير عرض كل 10 سجلات في عمود، فقبل أن أعطيك الكود أيضا سنقوم بتعديل ما كتبناه سابقا بحيث أن يتم إعادة بناء القالب بعد كل 3 سجلات، سيكون الكود كالتالي:

<asp:ListView ID="myListView" runat="server" DataSourceID="myDataSource" ItemPlaceHolderID="myItem" GruopPlaceHolderID="myGroup"
	GroupItemCount="3">
	<LayoutTemplate>
		<asp:PlaceHolder ID="myGroup" runat="server" />
	</LayoutTemplate>
	<GroupTemplate>
		<ul>
			<asp:PlaceHolder id="myItem" runat="server" />
		</ul>
	</GroupTemplate>
	<ItemTemplate>
		<li>
			<%# Eval("name") %>
		</li>
	</ItemTemplate>
</asp:ListView>

لاحظ أننا اضفنا في تعريف الـ ListView التالي GroupPlaceHolder وأعطيناه الـ ID التالي myGroup (بشكل إفتراضي يكون الـ ID هو groupPlaceHolder) وأيضا قمنا بإضافة GroupItemCount وهو الذي يتحكم بالعدد الذي بعده سيتم إعادة بناء القالب إن وجدت سجلات، وأيضا قمنا بتعريف GroupTemplate وهو الذي سيتم إعادة بناءه، فأرجوا أن تنتبة للهرمية المطروحة هنا حيث أنه لو فهمتها ستجعل حياتك أكثر سهولة، والهرمية كالتالي :

LayoutTemplate

	GroupTemplate		// Repeate After GroupItemCount times  (Default is 1)

		ItemTemplate


OR


LayoutTemplate

	ItemTemplate

سيكون المخرج النهائي للكود الذي تم تعديلة كالتالي :

<ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
</ul>
<ul>
        <li>4</li>
        <li>5</li>
</ul>

الآن دعنا نتحدث عن الذي تريده: أولا تريد عرض البيانات في صف واحد، وكل 10 سجلات يتم وضعها في عمود، دعنا نأخذ السيناريو التالي: لدينا جدول اسمة user به uid و uname ولدينا أيضا جدول اسمه book به bid و book_name و uid على علاقة بالجدول الأول FK -> PK. نريد أن نعرض الكتب التي تم إدخالها مستخدم معين، سيكون القالب العام LayoutTemplate عبارة عن جدول به سطر واحد وبه GroupPlaceHolder

وبعد ذلك سنضيف GroupTemplate به TD يحوي على UL يحوي ItemPlaceHolder ، وأخيرا سنقوم بإضافة ItemTemplate يحوي على LI لعرض سجل واحد، ولا ننسى تحديد الـ GroupItemCount بالرقم الذي نرغب فالتكرار من بعده وهو في حالتنا هذه 10، إليك الكود :

<asp:ListView ID="bookListView" runat="server" GroupPlaceholderID="columnPlaceHolder"
            ItemPlaceholderID="bookPlaceHolder" DataSourceID="bookDataSource" GroupItemCount="10">
            <LayoutTemplate>
                <table style="width: 100%;" border="1" cellpadding="5" cellspacing="0">
                    <tr>
                        <asp:PlaceHolder ID="columnPlaceHolder" runat="server" />
                    </tr>
                </table>
            </LayoutTemplate>
            <GroupTemplate>
                <td style="vertical-align: top">
                    <ul style="list-style-type: none; padding: 0; margin: 0;">
                        <asp:PlaceHolder ID="bookPlaceHolder" runat="server" />
                    </ul>
                </td>
            </GroupTemplate>
            <ItemTemplate>
                <li><%# Eval("book_name") %></li>
            </ItemTemplate>
        </asp:ListView>

ولكي ترا النتائج أو تقوم بالتعديل عليها تم إضافة المشروع كاملا في المرفقات

أتمنى لك التوفيق

ColumnsInColumn.zip

#6

اشكرك اخي ساجرب واستنتج

جزك الله خير

#7

صحيح هي بالجريد ستكون شديدة الصعوبة ... ويمكنك استخدام ListView أو Repeater ... وأنا أرشح الأخير نظراً لأنه يعتمد كلياً على القوالب Templates وهذا ما يجعله شديد المرونة ...

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…