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

كيف أجعل Datalist تقرأ ملفات من السيرفر وتجعلها Hyperlink

بدأه AboMoayad في 11 مارس 2008 · 12 رد · 2,013 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انا لدي كود يمثل قراءة ملفات من مجلد على السيرفر ويضعها في الصفحة ويجعلها HyperLink

Dim di As New IO.DirectoryInfo(Server.MapPath("~/UploadFiles/sch_qb"))
		Dim fiArr As System.IO.FileInfo() = di.GetFiles()
		Dim fi As System.IO.FileInfo

		For Each fi In fiArr

			Dim hl As New HyperLink

			hl.Font.Size = 20
			hl.Text = fi.Name.Replace(Path.GetExtension(fi.Name), "")
			hl.NavigateUrl = "~/UploadFiles/sch_qb/" + fi.Name
Next fi

لكن الان أريد كود يقرأ الملفات ويضعها كHyperLink على DataList

تم تعديل هذه المشاركة بواسطة مبرمج القاعده في 11 مارس 2008 في 19:39

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

#2

لقد قضيت أكثر من أربع ساعات في محاولة لذلك ... لكن يبدو معلوماتي قديمة جدا .. و متبلدة...

لا يهم ..

 Sub readfiles()
		Dim di As New IO.DirectoryInfo(Server.MapPath("~/UploadFiles/"))
		Dim fiArr As System.IO.FileInfo() = di.GetFiles()
		Dim fi As System.IO.FileInfo


		Dim i As Integer = 0


		For Each fi In fiArr




			Dim hl As New HyperLink

			hl.Font.Size = 20
			hl.Text = fi.Name.Replace(IO.Path.GetExtension(fi.Name), "")
			hl.NavigateUrl = "~/UploadFiles/" + fi.Name

			'creat Item
			Dim listItem As DataListItem


			If (i Mod 2 = 0) Then

				listItem = New DataListItem(i, ListItemType.Item)
				listItem.BackColor = Drawing.Color.AliceBlue
			Else
				listItem = New DataListItem(i, ListItemType.AlternatingItem)
				listItem.BackColor = Drawing.Color.Bisque

			End If

			ListItem.Controls.Add(hl)
			DataList1.TemplateControl.Controls.Add(ListItem)

			i = i + 1



		Next fi


	End Sub

كما تلاحظ النتجية سوف تكون في Datalist و لكن ضمن Template واحد فقط للأسف ..

لذلك الحل غير مجدي هنا ..

و ربما مع مزيد من المحاولات تصل للحل المطلوب .

، بالتوفيق.

تم تعديل هذه المشاركة بواسطة جوليا في 13 مارس 2008 في 17:26

#3

القضية اسهل من ذلك نظرا لدعم الDataList للربط مع اي collection بما فيها المصفوفات arrays

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		Dim di As New IO.DirectoryInfo(Server.MapPath("~/UploadFiles/sch_qb"))
		Dim fiArr As IO.FileInfo() = di.GetFiles()
		DataList1.DataSource = fiArr
		DataList1.DataBind()
	End Sub

<asp:DataList ID="DataList1" runat="server">
		<ItemTemplate>
		<a href='<%#Me.ResolveUrl("~/UploadFiles/sch_qb/"&Eval("Name"))%>'><%#Eval("Name")%></a>
		</ItemTemplate>
		</asp:DataList>
#4

نفس الشيء يمكن عمله بالHyperLink مع التقاط حدث ItemDataBound:

<asp:DataList ID="DataList1" runat="server">
		<ItemTemplate>
			<asp:HyperLink ID="HyperLink1" runat="server" Text='<%#Eval("Name")%>'></asp:HyperLink>

		</ItemTemplate>
		</asp:DataList>

Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
		If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

			CType(e.Item.FindControl("HyperLink1"), HyperLink).NavigateUrl = Me.ResolveUrl("~/UploadFiles/sch_qb/" & DataBinder.Eval(e.Item.DataItem, "Name"))
		End If
	End Sub

تم تعديل هذه المشاركة بواسطة madani في 14 مارس 2008 في 00:45

#5

اذا اردت الاستغناء عن الحدث ItemDatabound وعمل كل شيء في صفحة الaspx مع الاحتفاظ بالHyperLink :

<asp:DataList ID="DataList1" runat="server">
		<ItemTemplate>
			<asp:HyperLink ID="HyperLink1" runat="server" Text='<%#Eval("Name")%>' NavigateUrl='<%#Me.ResolveUrl("~/UploadFiles/sch_qb/" & Eval("Name"))%>'></asp:HyperLink>
		  </ItemTemplate>
		</asp:DataList>
#6

ماشاء الله تبارك الله , الله يحفظكم ..

الان سأجرب حلولكم وأرد لكم خبر ..

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

#7

سؤال سريع لاهنت

Eval("Name")

من اين اتت الـ Name

سؤال آخر

أرجو شرح هذه النقطتين

1 - ItemDataBoun

2 -If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#8

مدهش !!

أربع ساعات من العمل المتواصل و لا شيء ، و ها هنا الحل و بعدة طرق ، فعلا الخبرة مهمة .

ملاحظة :

الساحر / أنصحك بالقراءة عن الـ Data Processing كي تصل للأجوبة بشكل معمق.

، تحياتي .

#9
ملاحظة :
الساحر / أنصحك بالقراءة عن الـ Data Processing كي تصل للأجوبة بشكل معمق.

عندك مواد معينه

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#10
السـاحر كتب:
ملاحظة :
الساحر / أنصحك بالقراءة عن الـ Data Processing كي تصل للأجوبة بشكل معمق.

عندك مواد معينه

في الواقع هنالك الدورة التدريبة من الصفر حتى الإحتراف ضمن الموقع الرسمي للـ ASP.Net

و قد درستها منذ سنة ، و من هنا اكتسبت الخبرة ضمن هذا المجال ، سوف تكون مفيدة جدا لك ، لكن عليك بالصبر ..

http://www.asp.net/learn/data-access/

بالنسبة لأسئلتك أستطيع الإجابة عليها بإختصار ، لكني أفضل إنتظار مدني كي تصلك الإجابة مفصلة و أكثر دقة، فهو يمتلك خبرة أكثر مني ..

و عذرا للأخ / مبرمج القاعدة لخروجنا عن الموضوع .

، بالتوفيق .

#11

100% أستاذ مدني ولكن Extension يظهر مع الملف وانا لا أريده ان يظهر

حاولت باستخدام هذا الكود لكن يعطيني رسالة خطأ : the path not legal form

Dim di As New IO.DirectoryInfo(Server.MapPath("~/UploadFiles/sch_qb"))
		Dim fiArr As IO.FileInfo() = di.GetFiles()
		Dim i As Integer

		For i = 0 To UBound(fiArr)
				fiArr(i) = fiArr(i).Replace(Path.GetExtension(fiArr(i).ToString), "")
		Next

		DataList1.DataSource = fiArr
		DataList1.DataBind()

تم تعديل هذه المشاركة بواسطة مبرمج القاعده في 18 مارس 2008 في 16:19

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

#12
<%#IO.Path.GetFileNameWithoutExtension(Eval("FullName"))%>
#13
السـاحر كتب:
سؤال سريع لاهنت

Eval("Name")

من اين اتت الـ Name

سؤال آخر

أرجو شرح هذه النقطتين

1 - ItemDataBoun

2 -If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

الدالة Eval تقوم بارجاع خصائص الكائن الذي تم معه ربط عنصر التحكم ,ولاننا ربطنا الDataList مع مصفوفة من نوع FileInfo فان كل سجل في المصفوفة من نوع FileInfo له خاصية Name وهي اسم الملف.هناك خاصية اخرى لهذا النوع هي FullName وترجع لنا مسار الملف كاملا.

لو فرضنا ان لدينا كلاس Student كالتالي:

public class Student
{
	private string address;
	private int id;

	public Student(int id, string address)
	{
		this.id = id;
		this.address = address;

	}

	public int Id
	{
		get { return id; }
	}
	public string Address
	{
		get { return address; }
	}
}

فيمكن ربطه مع اي عنصر تحكم ك GridView,DropDownList,DataList,FormView وغيره ,بالمثال التالي:

<asp:GridView ID="GridView1" runat="server">
			<Columns>
				<asp:BoundField DataField="Id" HeaderText="Id" />
				<asp:TemplateField HeaderText="Address">

					<ItemTemplate>
						<%# Eval("Address")%>'
					</ItemTemplate>
				</asp:TemplateField>
			</Columns>
		</asp:GridView>

في اعلى الصفحة:

protected void Page_Load(object sender, EventArgs e)
	{
		Student[] students = new Student[2];
		students[0] = new Student(586, "Dubai");
		students[1] = new Student(586, "Cairo");
		GridView1.DataSource = students;
		GridView1.DataBind();
	}

سيظهر لك سجلان في جريد مع العمودين id و address كما تم تخزينهم في مصفوفة الكائنات students

بالنسبة للسؤال الثاني :

الخاصية ItemType مفيدة للتحقق من ان حدث الItemDatabound يعالج سطر به بيانات وليس سطر فارغ من البيانات لان الحدث يتم تشغيله لعدة انواع من الاسطر بما فيها الHeader و الFooter وهذان النوعان الاخيران ليسا مربوطين بالبيانات و بالتالي فان اي تعامل مع دوال البيانات كالدالة Eval ما لم يكن نوع السطر هو Item او AlternatingItem سيؤدي الى حدوث خطأ.

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

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

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

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

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